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

时间:2009-11-25 19:50:12

标签: mysql sql

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

id    A       B 
----------------
1     apple   2  
2     orange  1       
3     apple   2   
4     apple   1 

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

5 个答案:

答案 0 :(得分:18)

delete from myTable 
where id not in
(select min(id)
from myTable
group by A, B)

即。括号中的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
) 

答案 1 :(得分:1)

DELETE FROM fruit_table FT1
WHERE EXISTS
(
    SELECT * FROM fruit_table FT2 
    WHERE FT2.fruit_name_column = FT1.fruit_name_column
    AND   FT2.fruit_integer_column = FT1.fruit_integer_column
    AND   FT2.id <> FT1.id
)

这假设您不关心删除哪个重复记录。

答案 2 :(得分:1)

DELETE
FROM mytable
USING mytable, mytable AS vtable
WHERE vtable.id > mytable.id
AND mytable.A = vtable.A
AND mytable.A = vtable.A

答案 3 :(得分:0)

您可以使用包含所需数据的临时表:

insert into temp_table
select min(id), A, B
 group by A, B

答案 4 :(得分:0)

我不确定你在这里问的是什么。如果您不想复制A和B列,请执行您提到的SELECT DISTINCT A, B FROM XXX。也许您可以发布一个您希望看到的结果类型的示例。