mysql - 删除列中的重复项

标签 mysql sql

我有以下查询来基本上找到我的用户名列中的所有重复项:

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/

相关文章:

php - MySQL/PHP 中的时区偏移量(和 st/dst 更改)

php - 语法错误,Insert 语句中出现意外的 '' (T_ENCAPSED_AND_WHITESPACE)

mysql - 一个查询中的多个 INSERT INTO 语句

sql - HIVE从子查询创建表

SQLQuery 不返回查询的文档

mysql - 用 DATEADD 减去年份不能正确处理闰年

mysql - SQL 查询总唯一点击数

mysql - SQL : data aren't found

php - 空值 MySQL

mysql - join with where Vs join SQL 中的关键字