2011-08-01 18 views
1

私のデータベースには、ネストされた項目の集合である重要な列がidparentであるテーブルがあります。 parentは、常にその内部でネストされている行IDを指します。MySQLはネストされたセットの項目を更新します

アイテムを削除すると、その直接の子供は、存在しない親を指し始めるので、修正したいものです。

私は任意の孤立した項目の親をリセットするために、このクエリを試してみました:

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

はしかし、それは私にエラーを与える:「あなたはFROMに更新のターゲット表 『MENU_ITEM』を指定することはできません句。"

これに取り組む正しい方法は何ですか?

+0

それはそれは隣接リストだ、ネストされたセットではありません。 – Quassnoi

+0

実際には、ネストされたセットを使用していますが、 'left'と' right'カラムは私の問題では関係ありません。 – mingos

+0

ああ、OK。あなたの両親は親の親を参照していますか、究極の祖先ですか? – 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

関連する問題