我有一张桌子,父母可以有几个孩子......设置如下:
id, parent, child
一些示例数据如下所示:
id parent_id child_id
1 2 1
2 2 3
3 2 3
因此,对于此示例,我希望删除parent_id=2
和child_id=3
我无权在此表中添加键或索引,因此我需要手动删除父项具有同一子项的多个实例的所有项。
例如,我不能在表格中多次Parent=2
,Child=3
。
我需要通过并删除所有Parent=2
和Child=3
建议?
如果可能,我想使用一个声明。
答案 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);