2011-08-01 71 views
1

我在我的數據庫中有一個表格,它包含一組嵌套項目,重要的列爲idparentparent始終指向它嵌套在其中的行ID。MySQL更新嵌套集的項目

當我刪除一個項目時,它的直接子項目開始指向一個不存在的父項,這是我想要糾正的。

我已經爲復位的任何孤立的項目父嘗試此查詢:

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

但是,它給了我一個錯誤:「您不能指定目標表‘MENU_ITEM’的更新在FROM條款。」

解決此問題的正確方法是什麼?

+0

這不是一個嵌套集合,它的鄰接表。 – Quassnoi

+0

實際上,我使用了一個嵌套集合,但是'left'和'right'列與我的問題無關。 – mingos

+0

啊,好的。你的父母是否提及直系父母或終極祖先? – Quassnoi

回答

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

謝謝,我沒想過在我的更新查詢中使用聯接。它完美的作品:)。 – mingos

0

試試這個:

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

您的語法無效,但感謝您給它一個鏡頭:)。 – mingos