PostgreSQL删除没有id或unique_key的重复项

时间:2018-11-23 04:12:11

标签: postgresql duplicates sql-delete

我想知道如何删除表中确切重复的行并仅保留其中一行。 例如这个桌子。

enter image description here

enter image description here

我读到的大多数线程都利用了idunique_key,在这种情况下我没有。

编辑:当我说remove时,我是说delete来自表中的记录,而我又没有ID来创建保持条件的引用一条记录。抱歉造成混乱。

谢谢。

这可能是与其他线程相同的问题。但是,他们未能解释什么faid成功实现了ctid。因此,我想说的是我用相同的词但不同的问题问的内容。请删除“标记重复项”。谢谢。

4 个答案:

答案 0 :(得分:2)

您可以在下面尝试

如果您需要专门针对重复的记录,则可以使用内部ctid字段,该字段唯一地标识一行:

DELETE FROM yourtablename
WHERE ctid NOT IN (
  SELECT MIN(ctid)
  FROM yourtablename
  GROUP BY date, value, label,sequence
)

答案 1 :(得分:0)

在这种情况下您可以做到

SELECT DISTINCT * FROM mytable

给定您共享的输入,这将仅包含不同的行并产生相同的输出。

但是,请注意,这仅在所有字段均相等时才有效。

例如,如果您的表具有json列,则上述方法将不起作用,因为postgresql无法知道如何比较两个json对象是否相等。

答案 2 :(得分:0)

从mytable中选择不同的*

答案 3 :(得分:0)

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

取自Delete Duplicate Records in PostgresSQL answer