2012-03-06 1 views
0

모든 레코드를 이전 레코드 값에서 파생 된 값으로 업데이트해야하는 테이블이 있습니다. 및 rgt의 값 ((되어야 (- 예 SQL 구문 : 이전 열 값의 값을 차지하는 UPDATE에 대한 열 값을 파생합니다.

, 주어진 세 필드 id, lftrgt는, I는 (1)의 lft) + 2 ((현재 id)의 값으로 lft 필요 현재 id-1)의 rgt) + 2). 나는 소유 의미를 암시합니다 select lft where id=[current id-1]select rgt where id=[current id-1]

적절한 SQL 구문으로 표현하는 방법은 무엇입니까?

  • lft3에 동일한 것, 레코드의 id2 감안할 때, rgt4 동일하다.
  • 이 는 lft5 동일한 것, 레코드의 id3입니다 감안할 때 rgt6 동일하다.
  • lft7에 동일한 것, 레코드의 id4 감안할 때, rgt8 동일하다. (예를 들어, 고려 id 값 복용)

너무 단순 연산을 쉽게하고 lftrgt의 값을 고려하지 않을 것이다.

감사합니다,

매트

[업데이트]

MySQL 5.1.52입니다.

+2

수없는'UPDATE (T)를 lft = 2 * id - 1, rgt = 2 * id'로 충분합니까? – Benoit

+0

몇 가지 샘플 데이터와 예상 결과를 게시 할 수 있습니까? – Taryn

+0

가장 낮은 ID를 가진 레코드는 어떨까요? –

답변

0

가장 낮은 ID를 가진 레코드의 값을 원하는대로 말하지 않았습니다.

당신은 값이 가장 낮은 ID를 변경하고 싶다면 (또는 id - 1 기록이없는 경우), 당신은 하위 쿼리, ORDER BY를 사용하여, UPDATE 수 있으며, COALESCE :

UPDATE t SET lft = COALESCE((SELECT lft FROM t t2 WHERE t2.id = t.id - 1) + 2, lft), 
    rgt = COALESCE((SELECT rgt FROM t t2 WHERE t2.id = t.id - 1) + 2, rgt) 
ORDER BY t.id ASC 
관련 문제