SQLite查询中的CASE语句

54

为什么这个查询不起作用? :( 我尝试替换嵌套的 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个回答

92

这个从句的语法有误(以及类似的从句)

    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


36

此外,您不必使用嵌套的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接