PostgreSQL重複資料刪除資料

來源:互聯網
上載者:User

去重的方法一般是找到重複資料中的一條,以某一唯一條件去掉其他重複值。

Oracle 去重的方法很多,常用的是根據 rowid 進行去重。

PostgreSQL 庫如何去除單表重複資料呢?可以通過 ctid 進行,下面是實驗過程。

一、建立測試表

david=# create table emp (david(# id int,david(# name varchar);CREATE TABLEdavid=# 

二、插入測試資料

david=# insert into emp values (1, 'david');INSERT 0 1david=# insert into emp values (1, 'david');INSERT 0 1david=# insert into emp values (1, 'david');INSERT 0 1david=# insert into emp values (2, 'sandy');INSERT 0 1david=# insert into emp values (2, 'sandy');INSERT 0 1david=# insert into emp values (3, 'renee'); INSERT 0 1david=# insert into emp values (4, 'jack');  INSERT 0 1david=# insert into emp values (5, 'rose'); INSERT 0 1david=# 

三、查詢初始化資料

david=# select ctid, * from emp; ctid  | id | name  -------+----+------- (0,1) |  1 | david (0,2) |  1 | david (0,3) |  1 | david (0,4) |  2 | sandy (0,5) |  2 | sandy (0,6) |  3 | renee (0,7) |  4 | jack (0,8) |  5 | rose(8 rows)david=# 

查詢重複資料數

david=# select distinct id, count(*) from emp group by id having count(*) > 1; id | count ----+-------  1 |     3  2 |     2(2 rows)david=# 

查詢出 id 為1的記錄有3條,id 為2的記錄有2條。

四、查詢要保留的資料

以 min(ctid) 或 max(ctid) 為準。

david=# select ctid, * from emp where ctid in (select min(ctid) from emp group by id); ctid  | id | name  -------+----+------- (0,1) |  1 | david (0,4) |  2 | sandy (0,6) |  3 | renee (0,7) |  4 | jack (0,8) |  5 | rose(5 rows)david=# 

五、重複資料刪除資料

david=# delete from emp where ctid not in (select min(ctid) from emp group by id);DELETE 3david=# 

六、查看最後結果

david=# select ctid, * from emp; ctid  | id | name  -------+----+------- (0,1) |  1 | david (0,4) |  2 | sandy (0,6) |  3 | renee (0,7) |  4 | jack (0,8) |  5 | rose(5 rows)david=# 

說明:如果表中已經有標明唯一的序列主索引值,可以把該值替換上述的ctid直接刪除。

七、其他方法

也可以使用以下SQL重複資料刪除資料。

david=# delete from emp adavid-# where a.ctid <>david-# (david(# select min(b.ctid) from emp bdavid(# where a.id = b.iddavid(# );DELETE 3david=# 

說明:在表資料量較大的情況下,這種刪除方法效率很高。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.