我有以下查询来基本上找到我的用户名列中的所有重复项:
SELECT `username`
FROM `instagram_user`
GROUP BY `username`
HAVING COUNT( * ) >1
如何删除所有重复项,以便在表中只留下一个唯一的用户名?我不关心保留或删除的是哪个实体,只要表中有一个唯一的用户名即可。
最佳答案
如果您不关心选择什么记录,那么只需在使用 IGNORE
时添加一个唯一约束
ALTER IGNORE TABLE instagram_user ADD UNIQUE (username);
这是 SQLFiddle 演示
MySQL 将为您完成这项工作。无论如何,您都希望拥有该唯一约束,以防止您的表在未来出现重复。
或者你可以这样做
DELETE t
FROM instagram_user t JOIN
(
SELECT username, MAX(id) id
FROM instagram_user
GROUP BY username
HAVING COUNT(*) > 1
) q
ON t.username = q.username
AND t.id <> q.id
这将只为具有重复用户名的行留下具有最大 ID 的行。
这是 SQLFiddle 演示
关于mysql - 删除列中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19128738/