删除PostgreSQL中的重复记录

我在PostgreSQL 8.3.8数据库中有一个表,该表上没有键/约束,并且有多个行,它们的值完全相同。

我想删除所有重复项,并仅保留每行1个副本。

特别是有一列(称为“密钥”)可以用来标识重复项(即,每个不同的“密钥”应该只存在一个条目)。

我怎样才能做到这一点?(理想情况下,使用单个SQL命令)在这种情况下,速度不是问题(只有几行)。


守着星空守着你
浏览 411回答 3
3回答

潇潇雨雨

DELETE FROM dupes aWHERE a.ctid <> (SELECT min(b.ctid)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM&nbsp; &nbsp;dupes b&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WHERE&nbsp; a.key = b.key);

慕运维8079593

更快的解决方案是DELETE FROM dups a USING (&nbsp; &nbsp; &nbsp; SELECT MIN(ctid) as ctid, key&nbsp; &nbsp; &nbsp; &nbsp; FROM dups&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; GROUP BY key HAVING COUNT(*) > 1&nbsp; &nbsp; &nbsp; ) b&nbsp; &nbsp; &nbsp; WHERE a.key = b.key&nbsp;&nbsp; &nbsp; &nbsp; AND a.ctid <> b.ctid
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server