如何在MySQL中查找重复的字段值并将其删除

时间:2010-04-26 22:23:41

标签: php mysql

考虑我们在名为(tpl_users)的表中有一个名为(username)的字段,现在这个表有很多重复的行

我写了这段代码来删除重复的用户名:

Delete FROM tpl_users WHERE username = username;

如何删除重复的用户名?

4 个答案:

答案 0 :(得分:2)

您的查询将删除用户名不为NULL的所有行。

如果要识别与多行关联的用户名:

SELECT username
  FROM tpl_users
 GROUP BY username
HAVING COUNT(*) > 1;

在将其转换为DELETE之前,您需要注意大多数查询将删除与重复名称关联的所有记录,而不是仅保留其中一个重复项。

答案 1 :(得分:1)

您要做的是删除重复的行。

您将通过查找所有非重复行并将表替换为这些行来执行此操作:

create table tpl_users_new as select distinct * from tpl_users;

alter table tpl_users rename to tpl_users_old;

alter table tpl_users_new rename to tpl_users;

答案 2 :(得分:1)

如果您希望保留ID最低的用户,请首先确保此查询包含您要删除的内容(并备份您的数据库):

SELECT u1.id, u1.username FROM tpl_users u1 LEFT JOIN tpl_users u2 ON u1.username = u2.username WHERE u1.id > u2.id;

然后,如果您的数据库已备份,并且您确定上述语句代表您要删除的内容。

DELETE u1 FROM tpl_users u1 LEFT JOIN tpl_users u2 ON u1.username = u2.username WHERE u1.id > u2.id

答案 3 :(得分:0)

假设表中有一个主键列,您可以这样做:

DELETE
FROM tpl_uers
USING tpl_users, tpl_users AS vtable
WHERE vtable.id > tpl_users.id
AND tpl_users.username = vtable.username