删除MySQL中的重复记录,包括原始记录

时间:2013-07-09 18:20:51

标签: mysql duplicates

我的问题是这个,

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

所以如果表有两个这样的记录:

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

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

感谢您的帮助

1 个答案:

答案 0 :(得分: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

请参阅小提琴here

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

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

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

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