根据重复的列值删除行/条目

时间:2014-06-17 00:17:23

标签: mysql sql

我有一个名为prospective_shop的表,其中一个列名是' username'。用户名未设置为主键,但我想删除所有具有重复用户名的行。我怎样才能以最快的方式做到这一点?

我尝试了以下操作:

ALTER IGNORE TABLE  `prospective_shop` ADD UNIQUE INDEX idx_name (username);

然后它给了我:

 Duplicate entry 'calista_shopp' for key 'idx_name'

1 个答案:

答案 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只是临时表的别名。