为了账号安全,请及时绑定邮箱和手机立即绑定

删除PostgreSQL中的重复记录

删除PostgreSQL中的重复记录

守着星空守着你 2019-12-11 14:09:39
我在PostgreSQL 8.3.8数据库中有一个表,该表上没有键/约束,并且有多个行,它们的值完全相同。我想删除所有重复项,并仅保留每行1个副本。特别是有一列(称为“密钥”)可以用来标识重复项(即,每个不同的“密钥”应该只存在一个条目)。我怎样才能做到这一点?(理想情况下,使用单个SQL命令)在这种情况下,速度不是问题(只有几行)。
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

DELETE FROM dupes a

WHERE a.ctid <> (SELECT min(b.ctid)

                 FROM   dupes b

                 WHERE  a.key = b.key);


查看完整回答
反对 回复 2019-12-12
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

更快的解决方案是


DELETE FROM dups a USING (

      SELECT MIN(ctid) as ctid, key

        FROM dups 

        GROUP BY key HAVING COUNT(*) > 1

      ) b

      WHERE a.key = b.key 

      AND a.ctid <> b.ctid



查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 410 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信