MySQL更新嵌套集的一个项

MySQL更新嵌套集的一个项,mysql,nested-sets,Mysql,Nested Sets,我的数据库中有一个表,其中包含一组嵌套的项,有效列为id和parent父项始终指向嵌套在其中的行id 当我删除一个项时,它的直接子项开始指向不存在的父项,这是我想要更正的 我已尝试此查询以重置任何孤立项的父项: UPDATE menu_item SET parent = 0 WHERE parent NOT IN ( SELECT id FROM menu_item ); 但是,它给了我一个错误:“您不能在FROM子句中为update指定目标表'menu\U item' 解决这个问题的

我的数据库中有一个表,其中包含一组嵌套的项,有效列为
id
parent
<代码>父项始终指向嵌套在其中的行id

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

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

UPDATE menu_item
SET parent = 0
WHERE parent NOT IN (
    SELECT id FROM menu_item
);
但是,它给了我一个错误:“您不能在FROM子句中为update指定目标表'menu\U item'

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

试试看:

update m
set parent = 0
from menu_item m
where m.parent not in (select id from menu_item m1);
尝试一下:

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

这不是一个嵌套集,它是邻接列表。实际上,我使用的是一个嵌套集,但是
列与我的问题无关。啊,好的。你的父母指的是直系父母还是最终祖先?这不是一个嵌套集合,而是邻接列表。实际上,我使用的是一个嵌套集合,但
列与我的问题无关。啊,好的。您的父母是指直系父母还是指最终祖先?您的语法无效,但感谢您试一试:)。您的语法无效,但感谢您试一试:)。谢谢,我没有考虑在更新查询中使用联接。它工作得很好:)。谢谢,我还没有考虑在我的更新查询中使用联接。它工作得很好:)。