IF() альтернатива в SQLite У меня есть код для MySQL (perl): UPDATE pages SET rkey = rkey + 2, lkey = IF(lkey >= $key, lkey + 2, lkey) WHERE rkey >= $key Мне нужно использовать этот код с SQLite, но нет поддержки функции IF(). Что я могу сделать? Ответ 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 Разве это не лучше?
Ответ 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 Разве это не лучше?