2011-08-01 3 views
1

중요한 데이터베이스가 idparent 인 중첩 세트를 포함하는 테이블을 데이터베이스에 보유하고 있습니다. parent은 항상 내부에 중첩 된 행 ID를 가리 킵니다.MySQL은 중첩 세트의 항목을 업데이트합니다.

항목을 삭제하면 해당 직접 자식이 존재하지 않는 부모를 가리 키기 시작합니다. 이는 수정하고 싶습니다.

내가 고아 항목의 부모 재설정하기 위해이 쿼리를 시도했다 그러나

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

를, 그것은 나에게 오류를 제공합니다 : "당신은에서 업데이트를 목표 테이블을 'MENU_ITEM'지정할 수 없습니다 절."

이 문제를 해결하는 올바른 방법은 무엇입니까?

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

그것은, 그것은 인접리스트 중첩 된 집합이다 아니다 : – Quassnoi

+0

사실, 중첩 된 집합을 사용하고 있지만 왼쪽 및 오른쪽 열은 내 문제와 관련이 없습니다. – 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

이 사용 해보세요.
+0

귀하의 구문이 유효하지 않지만, 그것을 주셔서 감사합니다 :). – mingos