小编典典

如何删除重复的条目?

sql

我必须向现有表添加唯一约束。很好,除了表已经有数百万行,而且许多行违反了我需要添加的唯一约束。

删除有问题的行的最快方法是什么?我有一条SQL语句,该语句查找重复项并将其删除,但要花很长时间才能运行。有没有其他方法可以解决此问题?也许备份表,然后在添加约束后还原表?


阅读 329

收藏
2021-04-23

共1个答案

小编典典

其中一些方法似乎有些复杂,我通常这样做是:

给定table table,要在(field1,field2)上对其进行唯一化,使行保持为最大field3:

DELETE FROM table USING table alias 
  WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
    table.max_field < alias.max_field

例如,我有一个表,user_accounts我想在电子邮件上添加唯一的约束,但是有一些重复项。还说我想保留最近创建的一个(重复项中的最大id)。

DELETE FROM user_accounts USING user_accounts ua2
  WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;

注意-USING不是标准SQL,它是PostgreSQL扩展(但非常有用),但是最初的问题专门提到了PostgreSQL。

2021-04-23