我有张桌子父母可以生几个孩子..。设置如下:
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之外的所有实例
有什么建议吗?
如果可能的话,我想用一句话。
发布于 2015-04-09 16:37:23
使用mysql的多表delete语法在适当地连接到其自身时从表中删除:
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最高的行。
发布于 2015-04-09 16:13:12
这将删除所有重复行。
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);https://stackoverflow.com/questions/29543648
复制相似问题