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

Mar*_*sky 3 mysql duplicates sql-delete

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

大家好,我有一个问题,我有几条具有相同ID的记录,我想消除重复的记录,但只留下一条。对 mysql 语句有什么想法吗?

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

SELECT 
    email, 
    COUNT(email)
FROM
    contacts
GROUP BY email
HAVING COUNT(email) > 1;
Run Code Online (Sandbox Code Playgroud)

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

DELETE FROM wp_options  WHERE option_id=5 limit 1;
Run Code Online (Sandbox Code Playgroud)

有什么办法可以大规模做吗?

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

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) 
Run Code Online (Sandbox Code Playgroud)

Adi*_*ees 5

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

DELETE e1 FROM contacts e1, contacts e2 WHERE e1.id > e2.id AND e1.email = e2.email;
Run Code Online (Sandbox Code Playgroud)

这是一个示例链接链接 1

或者你可以更改><保留最高的id

DELETE e1 FROM contacts e1, contacts e2 WHERE e1.id < e2.id AND e1.email = e2.email;
Run Code Online (Sandbox Code Playgroud)

这是一个示例链接链接 2