postgresql删除重复数据(完全⼀样)仅保留⼀条
写这篇⽂章的⽬的主要是致⼒于提供⼀个开阔的思路,本⽂适应于有⼀定⼯作经验且有SQL基础的童靴。如果你想要照搬,Copy,那么你可以跳过下⾯的内容了。
⼀、问题描述
最近接⼿的⽼项⽬,在分析存储过程时,发现pg数据库中有⼀张配置表出现了完全相同 [所有字段都⼀样] 的数据(根据group by分组得知)重复1次,其结果造成前端页⾯展⽰时下拉框出现重复值。那么,⾯临的问题,很显然就是如何删除多余的1条数据?
⼆、解决⽅案
通常的思路:多余1条,我把多余的查出来,删了不就完事⼉了,开始码SQL。请注意:数据⽆价,备份数据。
⾸先group by,通过having count(*) > 1的,到重复数据的id(本⽂中的这个场景,id值也重复),然后 DELETE FROM table WHERE id = ‘’ LIMIT 1;
执⾏上⾯的SQL,结果显⽰error,语法错误。
经资料查询,mysql⽀持delete后⾯加limit ,⽽pgsql 在update/delete后⾯均不⽀持limit。 怎么搞?
1)思路1:先把数据取出来,通过临时表来搞定
⾸先创建⼀张临时表[temp],⽤于备份去重后的数据
insert into temp
select * from table where id not in ()
union
select … from table
group by … having count(*) > 1
然后删除原表中的数据,再把临时表temp的数据倒腾回去。
2)思路2:数据不是太多,全删掉,再重新插⼊
你不是重复吗,我没法直接删除。那我就釜底抽薪,全给你删掉,然后再重新插⼊
⾸先根据group by having 得到重复id,select * from table where id IN (’’), 这⾥我们可以借助Navicate⼯具导出SQL,⽬前pgAdminIII 暂未到导出功能。然后整理去掉导出SQL中重复的数据。最后先删除原表中重复数据,再⽤去重后的SQL插⼊新数据。
三、⼩结
君⼦性⾮异也,善假于物也。要善于利⽤⼯具
groupby分组多个⽅案,多条路。
四、参考资料
如果说我看得⽐别⼈更远些,那是因为我站在巨⼈的肩膀上 ——⽜顿

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。