web-dev-qa-db-ja.com

SQLiteクエリのCASEステートメント

このクエリが機能しないのはなぜですか? :(ネストされたIFステートメントを置き換えようとしました "... SET key = IF(key> = 11、key-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;
45
VeroLom

この句(および同様の句)の構文が間違っています

    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

80
Lukas Eder

また、ネストされた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
30
Hrusilov