PostgreSQL重複資料刪除資料sql語句

來源:互聯網
上載者:User

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


一、建立測試表

 代碼如下 複製代碼
david=# create table emp (
david(# id int,
david(# name varchar);
CREATE TABLE
david=#

二、插入測試資料

 代碼如下 複製代碼


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

三、查詢初始化資料

 代碼如下 複製代碼


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 3
david=#


六、查看最後結果

 代碼如下 複製代碼


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直接刪除

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.