SQLite查询中的CASE语句

Ver*_*Lom 46 sqlite nested case

为什么这个查询不起作用?:(我试图替换嵌套的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;
Run Code Online (Sandbox Code Playgroud)

Luk*_*der 81

该子句中的语法错误(和类似的)

    CASE lkey WHEN lkey > 5 THEN
        lkey + 2
    ELSE
        lkey
    END
Run Code Online (Sandbox Code Playgroud)

它也是

    CASE WHEN [condition] THEN [expression] ELSE [expression] END
Run Code Online (Sandbox Code Playgroud)

要么

    CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,它会读取:

    CASE WHEN lkey > 5 THEN
        lkey + 2
    ELSE
        lkey
    END
Run Code Online (Sandbox Code Playgroud)

查看文档(CASE表达式):

http://www.sqlite.org/lang_expr.html


Hru*_*lov 30

此外,您不必使用嵌套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
Run Code Online (Sandbox Code Playgroud)