У меня есть код для MySQL (perl):
UPDATE pages SET rkey = rkey + 2, lkey = IF(lkey >= $key, lkey + 2, lkey) WHERE rkey >= $key
Мне нужно использовать этот код с SQLite, но функция IF () не поддерживается.Что я могу сделать?
Для универсального SQL вы можете использовать CASE:
CASE
CASE используется для предоставления логики типа if-then-else для SQL.Его синтаксис: SELECT CASE ("column_name") WHEN "condition1" THEN "result1" WHEN "condition2" THEN "result2" ... [ELSE "resultN"] END FROM "table_name"
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 при изменении данных»
???это к
UPDATE pages SET lkey = lkey + 2 WHERE rkey >= $key AND lkey >= $key UPDATE pages SET rkey = rkey + 2, WHERE rkey >= $key
Разве это не лучше?