Оператор CASE в запросе SQLite
Почему этот запрос не работает?:( Я попытался заменить вложенный оператор IF "... SET lkey = IF (lkey >= 11, lkey - 5, IF (lkey > 5, lkey + 2, lkey))
UPDATE pages
SET lkey = CASE lkey WHEN lkey >= 11 THEN
lkey - 5
ELSE
CASE lkey WHEN lkey > 5 THEN
lkey + 2
ELSE
lkey
END
END,
rkey = CASE lkey WHEN lkey >= 11 THEN
rkey - 5
ELSE
CASE rkey WHEN rkey < 11 THEN
rkey + 2
ELSE
rkey
END
END
WHERE rkey > 5 AND
lkey < 12;
Ответы
Ответ 1
Синтаксис неверен в этом разделе (и аналогичных)
CASE lkey WHEN lkey > 5 THEN
lkey + 2
ELSE
lkey
END
Это либо
CASE WHEN [condition] THEN [expression] ELSE [expression] END
или
CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END
Итак, в вашем случае он будет читать:
CASE WHEN lkey > 5 THEN
lkey + 2
ELSE
lkey
END
Проверьте документацию (выражение CASE):
http://www.sqlite.org/lang_expr.html
Ответ 2
Кроме того, вам не нужно использовать вложенные CASE файлы. Вы можете использовать несколько линий WHEN-THEN, и линия ELSE также является необязательной, хотя я рекомендую ее
CASE
WHEN [condition.1] THEN [expression.1]
WHEN [condition.2] THEN [expression.2]
...
WHEN [condition.n] THEN [expression.n]
ELSE [expression]
END