-
去重的方法一般是找到重复数据中的一条,以某一唯一条件去掉其他重复值。一、创建测试表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 (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 | 32 | 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 3david=#六、查看最后结果david=# select ctid,8) | 5 | rose(5 rows)david=#说明:如果表中已经有标明唯一的序列主键值,可以把该值替换上述的ctid直接删除。七、其他方法david=# delete from emp adavid-# where a.ctid <>david-# (david(# select min(b.ctid) from emp bdavid(# where a.id = b.iddavid(# );DELETE 3david=#
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。