0

我的问题是这样的

我有一个包含电子邮件、名字和姓氏列的表。我可以使用什么查询来删除重复项,包括原始项?

因此,如果表有两条记录,如下所示:

johndoe@email.com | john | doe    
johndoe@email.com | john | doe

如何删除两条记录,以便将记录从表中完全删除?

我感谢您的帮助

4

1 回答 1

1

此查询将删除具有相同电子邮件、名字和姓氏的所有行:

DELETE yourtable.*
FROM
  yourtable INNER JOIN (SELECT email, firstname, lastname
                        FROM yourtable
                        GROUP BY email, firstname, lastname
                        HAVING COUNT(*)>1) dup
  ON yourtable.email = dup.email
     AND yourtable.firstname = dup.firstname
     AND yourtable.lastname = dup.lastname

在此处查看小提琴。

我正在使用一个将返回所有重复项的子查询,并且我正在将所有重复项与您的表本身连接起来,并且我正在删除与连接匹配的所有行。

编辑:如果您在名为重复的表中有所有重复项,则可以使用此删除查询:

DELETE Contacts.*
FROM
  Contacts INNER JOIN Duplicates
  ON Contacts.email = Duplicates.email
     AND Contacts.firstname = Duplicates.firstname
     AND Contacts.lastname = Duplicates.lastname

这将从联系人中删除与重复项上的行匹配的所有行(具有相同的电子邮件、相同的名字和相同的姓氏)

于 2013-07-09T18:26:00.813 回答