2015-11-22 46 views
0

重复我与这些字段的表和(样品)数据:MySQL的删除,其中2场匹配

id | dropperid | itemid 
1 | 933101 | 513  
2 | 330400 | 381  
3 | 868939 | 585  
4 | 111111 | 646  
5 | 933101 | 513  
6 | 933101 | 513  
7 | 943844 | 513  

如何删除所有重复,其中“复制”是指在同一dropperid和itemid的?

在上面的例子中,我想删除ID 5和6

有没有一种方法,我可以做到这一点对我整个表?我不想写在每一个dropperid和itemid删除重复。

回答

0

只需添加一个UNIQUE指数:

ALTER IGNORE TABLE MY_TABLE 
ADD UNIQUE INDEX drop_rel_idx (id); 

这将删除所有重复的行;特别是它会保持最旧的重复记录擦除较新的记录。

查看更多:

Remove duplicate rows

+0

drop_rel_idx?我不确定你是什么意思?那应该是什么? –

+0

您的表的索引名称,您可以使用你想要的。我认为该表将包含滴管和物品之间的关系,所以我写了'drop_rel_idx'。 'id'是要保留的第一列的名称。 –

+0

请注意,这将永久改变您的桌子的结构,您可能不希望/不允许这样做。 – simonalexander2005

0

使用MySQL的多表删除的语法在加入表本身的重复条件,而针对高IDS:

delete t1 
from mytable t1 
join mytable t2 on t1.dropperid = t2.dropperid 
and t1.itemid = t2.itemid 
and t1.id > t2.id 

最后一个条件是关键:它不仅防止行与自己匹配,而且将行分成两个桶; t2包含dupes的最低id值,其余值为t1,所以无论有多少重复项(即三元组,四元组等),这将保留最低的重复值id。