MySQL更新嵌套集的项目

时间:2011-08-01 14:47:36

标签: mysql nested-sets

我的数据库中有一个表,它包含一组嵌套的项目,其中有重要的列为idparentparent始终指向嵌套在其中的行ID。

当我删除一个项目时,它的直接子项开始指向一个不存在的父项,这是我想要纠正的。

我尝试过此查询以重置任何孤立项的父级:

UPDATE menu_item
SET parent = 0
WHERE parent NOT IN (
    SELECT id FROM menu_item
);

然而,它给了我一个错误:“你不能在FROM子句中为更新指定目标表'menu_item'。”

解决这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

UPDATE  mytable m
LEFT JOIN
        mytable mm
ON      mm.id = m.parent
SET     m.parent = 0
WHERE   mm.id IS NULL

答案 1 :(得分:0)

尝试一下:

update m
set parent = 0
from menu_item m
where m.parent not in (select id from menu_item m1);