Оператор CASE в запросе SQLite - PullRequest
       21

Оператор CASE в запросе SQLite

45 голосов
/ 11 февраля 2011

Почему этот запрос не работает?:( Я попытался заменить вложенный оператор 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;

Ответы [ 2 ]

80 голосов
/ 11 февраля 2011

Синтаксис в этом пункте неправильный (и подобные)

    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

30 голосов
/ 08 января 2015

Кроме того, вам не нужно использовать вложенные 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
...