Подтвердить что ты не робот

IF() альтернатива в SQLite

У меня есть код для MySQL (perl):

UPDATE pages
SET rkey = rkey + 2,
    lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key

Мне нужно использовать этот код с SQLite, но нет поддержки функции IF(). Что я могу сделать?

4b9b3361

Ответ 1

Для общего SQL вы можете использовать CASE:

CASE используется для представления логики if-then-else для SQL. Его синтаксис:

SELECT CASE ("column_name")
  WHEN "condition1" THEN "result1"
  WHEN "condition2" THEN "result2"
  ...
  [ELSE "resultN"]
  END
FROM "table_name"

Из http://www.sqlite.org/lang_expr.html раздела "Выражение CASE"

например.

UPDATE pages
SET rkey = rkey + 2,
    lkey = CASE  WHEN lkey >= $key THEN lkey + 2 ELSE lkey END
WHERE rkey >= $key

Еще одна ссылка о SQLite и CASE (пример обновления с подзапросом) http://sqlite.awardspace.info/syntax/sqlitepg09.htm

CASE может использоваться в UPDATE в общем SQL, но у меня нет информации о поддержке SQLite UPDATE с CASE

http://www.craigsmullins.com/ssu_0899.htm раздел "Использование выражений CASE при изменении данных"

Ответ 2

UPDATE pages
SET rkey = rkey + 2,
    lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key

??? он

UPDATE pages
SET lkey = lkey + 2
WHERE rkey >= $key AND lkey >= $key

UPDATE pages
SET rkey = rkey + 2,
WHERE rkey >= $key

Разве это не лучше?