考虑我们在名为(tpl_users)的表中有一个名为(username)的字段,现在这个表有很多重复的行
我写了这段代码来删除重复的用户名:
Delete FROM tpl_users WHERE username = username;
如何删除重复的用户名?
答案 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