CASE выражение, которое НЕ имеет оценки короткого замыкания?
Я недавно начал учить себя (ужасно) 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. Любая помощь приветствуется.
ПРИМЕЧАНИЕ: я прошу прощения, если есть какая-то явная ошибка - я новичок в этом, так что, пожалуйста, будьте спокойны
1 ответ
Если вы действительно просто добавляете 1 к counting_column
для каждого выполненного условия вы можете использовать цепочку из 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" = ...