我在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);
慕运维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
- 3 回答
- 0 关注
- 410 浏览
添加回答
举报
0/150
提交
取消