SQLite 查询中的 CASE 语句

Posted

技术标签:

【中文标题】SQLite 查询中的 CASE 语句【英文标题】:CASE statement in SQLite query 【发布时间】:2011-06-25 12:38:17 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

这个子句的语法错误(和类似的)

    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

【讨论】:

以上是关于SQLite 查询中的 CASE 语句的主要内容,如果未能解决你的问题,请参考以下文章

sql查询中case语句中的布尔值

如何克服 Hive for CASE 语句中的子查询

如何使用 SQL 中的 Case 语句将数据插入临时表

优化 Postgres 中的 case/decode 查询

Case 语句中的 select 语句

SQL查询语句SELECT中带有case when嵌套子查询判断的问题