Синтаксис SQL: получить значение столбца для UPDATE, которое учитывает значение предыдущего значения столбца - PullRequest
0 голосов
/ 06 марта 2012

У меня есть таблица, в которой мне нужно ОБНОВИТЬ все записи со значением, полученным из значения предыдущей записи.

Например, учитывая три поля id, lft и rgt, мне нужно, чтобы lft было значением (((current id - 1) 's lft) + 2 ) и rgt - значение (((текущее id - 1) s rgt) + 2). Я имею в виду обладание смыслом select lft where id=[current id-1] и select rgt where id=[current id-1]

Как мне выразить это в правильном синтаксисе SQL?

  • Учитывая, что id записи равно 2, lft будет равно 3, rgt будет равно 4.
  • Учитывая, что id записи составляет 3, lft будет равно 5, rgt будет равно 6.
  • Учитывая, что id записи равно 4, lft будет равно 7, rgt будет равно 8.

Таким образом, простые арифметические операции (например, с учетом значения id) не будут легко учитывать значения lft и rgt.

Спасибо

Мэтт

[обновление]

Это MySQL 5.1.52.

1 Ответ

0 голосов
/ 06 марта 2012

Вы не сказали, какими должны быть значения для записи с наименьшим идентификатором.

Если вы хотите, чтобы значения были неизменными для наименьшего идентификатора (или при отсутствии id - 1запись), вы можете UPDATE, используя подзапросы, ORDER BY и 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...