Postgresql去除重复数据的方法

Postgresql去除重复数据的方法,第1张

概述PostgreSQL删除重复数据 去重的方法一般是找到重复数据中的一条,以某一唯一条件去掉其他重复值。 Oracle 去重的方法很多,常用的是根据 rowid 进行去重。 PostgreSQL 库如何去除单表重复数据呢?可以通过 ctid 进行,下面是实验过程。 一、创建测试表 david=# create table emp ( david(# id int, david(# name varc

Postgresql删除重复数据

去重的方法一般是找到重复数据中的一条,以某一唯一条件去掉其他重复值。

Oracle 去重的方法很多,常用的是根据 rowID 进行去重。

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 (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,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,8) | 5 | rose
(5 rows)

davID=#
复制代码
说明:如果表中已经有标明唯一的序列主键值,可以把该值替换上述的ctID直接删除。

七、其他方法

也可以使用以下sql删除重复数据。

复制代码
davID=# delete from emp a
davID-# where a.ctID <>
davID-# (
davID(# select min(b.ctID) from emp b
davID(# where a.ID = b.ID
davID(# );
DELETE 3
davID=#
复制代码
实际情况往往千变万化,我们可能需要加where条件来进行判断,防止删除多的数据,比如我要删除订单号为169769的重复数据,那么我的sql需要这样写
delete from esale_Zencart_saleorder_line where order_ID=’169769’ and ctID not in ( select min(ctID) from esale_Zencart_salorder_line where order_ID=’169739’ group by model)
说明:在表数据量较大的情况下,这种删除方法效率很高
原文地址:http://www.cnblogs.com/mchina/archive/2013/04/15/3022086.html

总结

以上是内存溢出为你收集整理的Postgresql去除重复数据的方法全部内容,希望文章能够帮你解决Postgresql去除重复数据的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1174173.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存