Mysql重复行(使用2列检测到重复)

jas*_*son 18 mysql sql

如何删除此设置中的重复?

id    A       B 
----------------
1     apple   2  
2     orange  1       
3     apple   2   
4     apple   1 
Run Code Online (Sandbox Code Playgroud)

在这里我想删除(苹果,2)两次出现.身份证号码是唯一的.如果不是,我会使用DISTINCT关键字.我是否可以从列A和B中创建一个键,然后在其上使用DISTINCT关键字来获取我需要的内容?非常感谢您的回复.

dav*_*vek 20

delete from myTable 
where id not in
(select min(id)
from myTable
group by A, B)
Run Code Online (Sandbox Code Playgroud)

即括号中的select返回A和B的每个分组的第一个id; 删除不在此集合中的所有ID将删除A-plus-B组合的第一次出现"后续"的所有出现.

编辑:这种语法似乎有问题:请参阅错误报告:

http://bugs.mysql.com/bug.php?id=5037

一个可能的解决方法是这样做:

delete from myTable 
where id not in
(
      select minid from 
      (select min(id) as minid from myTable group by A, B) as newtable
) 
Run Code Online (Sandbox Code Playgroud)


Pet*_*r M 6

还有一个(来自http://labs.creativecommons.org/2010/01/12/removing-duplicate-rows-in-mysql/).添加唯一索引然后删除它:

ALTER IGNORE TABLE mytable ADD UNIQUE INDEX tmpindex (A,B);
ALTER TABLE mytable DROP INDEX tmpindex;
Run Code Online (Sandbox Code Playgroud)

IGNORE关键字是一个MySQL扩展,使得它丢弃违反行UNIQUE关键字,而不是仅仅失败.