我最近开始自学(可怕)SQLite。令我恼火的一件事是CASE表达式,即它采用短路评估这一事实。
有没有办法解决这个问题?我正在寻找一个不采用短路评估的CASE声明。
UPDATE [table]SET [counting_column] =
(
CASE
when [column1] = NULL
then [counting_column] + 1
...
when [column31] = NULL
then [counting_column] + 1
end
)
我希望每个case语句测试数据库中的每个条目,而不仅仅是第一个评估为true的条目。任何帮助将不胜感激。
注意:如果有一些明显的错误我会道歉 - 我在这方面很新,所以请轻松一下。
答案 0 :(得分:1)
如果您确实只为每个满足条件的counting_column
添加1,则可以使用 n CASE
语句链并将结果一起添加。每个人CASE
都会提供0
或1
,所有这些内容会相加并添加到counting_column
的当前值。
UPDATE [table] SET [counting_column] =
(
[counting_column] +
(CASE when [column1] IS NULL then 1 ELSE 0 END) +
(CASE when [column2] IS NULL then 1 ELSE 0 END) +
...
...
(CASE when [column30] IS NULL then 1 ELSE 0 END) +
(CASE when [column31] IS NULL then 1 ELSE 0 END)
)
请注意,我已将= NULL
更改为IS NULL
。 NULL
是一个特殊的非值,无法与等式=
进行比较。
我还要指出,尽管[]
封闭的标识符在SQLite中是可以的,但这主要是为了与T-SQL兼容。更标准的方法是在UPDATE "table" SET "counting_column" = ...