2011-02-02 9 views

ответ

52

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

СЛУЧАЙ используется, чтобы обеспечить, если-то-иначе тип логики 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 разделе "Случай выражение"

Э.Г.

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

Другой ссылка о SQLite & ДЕЛУ (с примером обновления с подвыборкой) http://sqlite.awardspace.info/syntax/sqlitepg09.htm

СЛУЧАЯ можно использовать в UPDATE в родовом SQL, но у меня нет информации о SQLite поддержки ОБНОВЛЯТЬ ДЕЛУ

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

+0

Спасибо, но мне нужно это в статье UPDATE – VeroLom

+1

VeroLom, просто попробуйте в UPDATE. CASE является частью сканирования основного выражения, а не частью SELECT. – osgx

+0

У меня SQLite долгое время без результата, когда я использую код «... lkey = CASE WHEN lkey => $ key THEN lkey + 2 ELSE lkey END ... – VeroLom

6
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 

Не лучше ли?