2014-06-17 141 views
1

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

我试着做以下几点:

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

但随后它给了我:

Duplicate entry 'calista_shopp' for key 'idx_name' 
+0

你有具体的标准,应该删除重复项? –

+0

你想删除所有的''calista_shopp'或只留下一个吗? –

回答

1
delete from prospective_shop 
where id not in 
(
    select * from 
    (
    select min(id) 
    from prospective_shop 
    group by username 
) x 
) 

您可以直接删除不属于每一个唯一的用户名与第一批的所有记录。通过为每个用户名组选择min(id)`,确保不删除那些,但其余的都是。

在MySQL中,您不能从同时选择的表中删除。像我一样,您可以通过使用另一个子查询来欺骗引擎。 x只是临时表的别名。

+1

Heya,这看起来不错,但是你能否解释一下这个问题是如何解决的?(不要忘记有大量的新手来到堆栈溢出并且解决方案可能对他们不明显)。 –