如何删除重复的 MySQL 记录(但只留下一个)

How to remove duplicate MySQL records (but only leave one)

如何删除重复的 MySQL 条记录(但只保留一条)

大家好,我有一个问题,我有好几条ID相同的记录,我想去掉重复的记录,只留下一条。关于 mysql 语句的任何想法?

我有这个语句来查看记录和重复项的数量,但是当我使用删除时它对我不起作用:

SELECT 
    email, 
    COUNT(email)
FROM
    contacts
GROUP BY email
HAVING COUNT(email) > 1;

我使用这个语句,但它只删除了一条重复记录:

DELETE FROM wp_options  WHERE option_id=5 limit 1;

有什么方法可以大规模地做到这一点?

更新:我正在使用这个语句,但它消除了所有重复记录而不留下一个:

DELETE FROM xhi_options
WHERE  option_id IN (SELECT option_id
                FROM   (SELECT option_id
                        FROM   xhi_options
                        GROUP  BY option_id
                        HAVING COUNT(option_id) > 1) AS T) 

在你的删除语句中你使用了limit 1选项,这意味着你将使用这条语句只删除一条记录。

尝试像

一样修复您的代码
DELETE FROM wp_options WHERE option_id=5 limit (dupl_rec_count - 1);

您可以使用它来保留具有最低 ID 值的行

DELETE e1 FROM contacts e1, contacts e2 WHERE e1.id > e2.id AND e1.email = e2.email;

这是一个例子linklink 1

或者您可以将 > 更改为 < 以保留最高 ID

DELETE e1 FROM contacts e1, contacts e2 WHERE e1.id < e2.id AND e1.email = e2.email;

这是一个例子linklink 2