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" = ...

Другие вопросы по тегам