Удалить много столбцов с нулевым - PullRequest
1 голос
/ 14 марта 2019

У меня есть таблица с 34 столбцами.Первые 4 столбца образуют первичный ключ (таким образом, они не имеют нулевых значений), а остальные 30 столбцов содержат данные и нулевые значения.Я хочу удалить все строки, где остальные 30 столбцов являются нулевыми.Один из возможных способов -

delete from my_table
where column_30 is null
and columns_29 is null
and column_28 is null
and column_27 is null
...
...
...

Есть ли простой способ сделать это без упоминания всех 30 имен столбцов?

Ответы [ 3 ]

2 голосов
/ 14 марта 2019

Нет, это невозможно. Вы могли бы немного сократить код, но заплатить штраф за сарказуемость - используя coalesce:

delete from my_table
where coalesce(column_30, column_29, column_28.....) is null

Как писал Дэмиен в своем комментарии, это будет работать только в том случае, если все столбцы имеют совместимые типы, что означает, что SQL Server может неявно конвертировать между ними.

1 голос
/ 14 марта 2019

coalesce получает список выражений и возвращает первое ненулевое выражение или ноль, если они все есть, так что вы можете использовать его как своего рода сокращение:

DELETE FROM mytable
WHERE  COALESCE(column_30, column_29, column_28, ...) IS NULL
0 голосов
/ 14 марта 2019

Еще один подход к этому. (Предполагая, что тип данных всех столбцов одинаков)

delete t 
from   my_table t 
where  (select top 1 1 as col 
        from   (values  (T.column_30), 
                        (T.columns_29), 
                        (T.columns_28 ), 
                        (T.columns_27 )) v(x) 
        where  x is null) = 1 
...