如何删除此设置中的重复项?
id A B
----------------
1 apple 2
2 orange 1
3 apple 2
4 apple 1
在这里我想删除(苹果,2)两次出现。身份证号码是唯一的。如果不是,我会使用DISTINCT关键字。我是否可以从列A和B中创建一个键,然后在其上使用DISTINCT关键字来获取我需要的内容?非常感谢您的回复。
答案 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
。也许您可以发布一个您希望看到的结果类型的示例。