解析postgresql 刪除重複資料案例

大雄45發表於2022-01-12
導讀 這篇文章主要介紹了postgresql 刪除重複資料案例詳解,本篇文章透過簡要的案例,講解了該項技術的瞭解與使用,以下就是詳細內容,需要的朋友可以參考下
1.建表
/*
 Navicat Premium Data Transfer
 
 Source Server         : localhost
 Source Server Type    : PostgreSQL
 Source Server Version : 110012
 Source Host           : localhost:5432
 Source Catalog        : postgres
 Source Schema         : public
 
 Target Server Type    : PostgreSQL
 Target Server Version : 110012
 File Encoding         : 65001
 
 Date: 30/07/2021 10:10:04
*/
 
 
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS "public"."test";
CREATE TABLE "public"."test" (
  "id" int4 NOT NULL DEFAULT NULL,
  "name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
  "age" int4 DEFAULT NULL
)
;
 
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO "public"."test" VALUES (1, 'da', 1);
INSERT INTO "public"."test" VALUES (2, 'da', 12);
INSERT INTO "public"."test" VALUES (3, 'dd', 80);
INSERT INTO "public"."test" VALUES (4, 'dd', 80);
INSERT INTO "public"."test" VALUES (5, 'd1', 13);
 
-- ----------------------------
-- Primary Key structure for table test
-- ----------------------------
ALTER TABLE "public"."test" ADD CONSTRAINT "test_pkey" PRIMARY KEY ("id");
2.根據名稱獲取重複

先看看哪些資料重複了

select name ,count(1)  from test group by name  having count(1)>1

輸出.

name        count
da              2
dd              2
3.刪除所有重複資料

注意把要更新的幾列資料查詢出來做為一個第三方表,然後篩選更新。

delete from test where name in (select t.name from (select name ,count(1)  from test group by name  having count(1)>1) t)
4.保留一行資料

這裡展示我們需要保留的資料:重複資料,保留ID最大那一條

SELECT
 1. 
FROM
 test 
WHERE
 id NOT IN (
 ( SELECT min( id ) AS id FROM test GROUP BY name ) 
 )
5.刪除資料
DELETE
FROM
 test 
WHERE
 id NOT IN (
 SELECT
  t.id 
 FROM
 ( SELECT max( id ) AS id FROM test GROUP BY name ) t 
 )

到此這篇關於postgresql 刪除重複資料案例詳解的文章就介紹到這了。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2851968/,如需轉載,請註明出處,否則將追究法律責任。

相關文章