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 语句的主要内容,如果未能解决你的问题,请参考以下文章