1

我最近开始自学(糟糕的)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 的条目。任何帮助将非常感激。

注意:如果有一些明显的错误,我深表歉意——我对此很陌生,所以请放轻松。

4

1 回答 1

1

如果您确实只是counting_column为满足的每个条件加 1,则可以使用n CASE语句链并将结果加在一起。每个人CASE提供一个01,所有这些加在一起并添加到 的当前值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" = ...

于 2013-02-08T03:35:21.853 回答