我有一个名为prospective_shop的表,其中一个列名是' username'。用户名未设置为主键,但我想删除所有具有重复用户名的行。我怎样才能以最快的方式做到这一点?
我尝试了以下操作:
ALTER IGNORE TABLE `prospective_shop` ADD UNIQUE INDEX idx_name (username);
然后它给了我:
Duplicate entry 'calista_shopp' for key 'idx_name'
答案 0 :(得分:1)
delete from prospective_shop
where id not in
(
select * from
(
select min(id)
from prospective_shop
group by username
) x
)
您可以删除所有不是每个唯一用户名的第一个记录。通过为每个用户名组选择min(id)`,确保不删除所有用户组。
在MySQL中,您无法同时从正在选择的表中删除。你可以像我一样使用另一个subselect来欺骗引擎。 x
只是临时表的别名。