需要删除表中的重复条目 - 两个字段组合

时间:2015-04-09 16:10:28

标签: mysql sql

我有一张桌子,父母可以有几个孩子......设置如下:

id, parent, child

一些示例数据如下所示:

id  parent_id  child_id
1   2          1
2   2          3
3   2          3

因此,对于此示例,我希望删除parent_id=2child_id=3

中的重复条目

我无权在此表中添加键或索引,因此我需要手动删除父项具有同一子项的多个实例的所有项。

例如,我不能在表格中多次Parent=2Child=3

我需要通过并删除所有Parent=2Child=3

的所有实例

建议?

如果可能,我想使用一个声明。

2 个答案:

答案 0 :(得分:1)

使用mysql的多表删除语法在适当连接到自身时从表中删除:

delete b
from mytable a
join mytable b on a.id < b.id
  and a.parent_id = b.parent_id
  and a.child_id = b.child_id

必须使用连接条件a.id < b.id来阻止行连接到自身,并将副本标识为具有重复对的最高ID的行。

答案 1 :(得分:0)

这将删除所有重复的行。

ALTER IGNORE TABLE TblName ADD UNIQUE INDEX idx_name (parent, child);

或者

CREATE TEMPORARY TABLE tmpTable (id INT);

INSERT  tmpTable
        (id)
SELECT  id
FROM    YourTable yt
WHERE   EXISTS
        (
        SELECT  *
        FROM    YourTabe yt2
        WHERE   yt2.parent = yt.parent 
                AND yt2.child = yt.child 
                AND yt2.id > yt.id
        );

DELETE  
FROM    YourTable
WHERE   ID IN (SELECT id FROM tmpTable);