概述 去重的方法一般是找到
重复数据中的一条,以某一唯一条件去掉其他重复值。 Oracle 去重的方法很多,常用的是根据 rowid 进行去重。 PostgreSQL 库如何去除单表重复
数据呢?可以通过 ctid 进行,下面是实验过程。 一、创建测试表 david=# create table emp ( david(# id int, david(# name varchar); C 去重的方法一般是找到重复数据中的一条,以某一唯一条件去掉其他重复值。 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=# 说明:在表数据量较大的情况下,这种删除方法效率很高。 总结
以上是内存溢出为你收集整理的PostgreSQL删除重复数据全部内容,希望文章能够帮你解决PostgreSQL删除重复数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)