Удалить строки из таблицы, где хотя бы одно из значений равно NULL - PullRequest
1 голос
/ 07 января 2020

У меня есть следующая таблица в MS SQL Сервер:

RowID    PersonNum   Address1
  1      456         1 My street
  2      NULL        1 My street
  3      789         1 My street
  4      987         2 My street
  5      963         2 My street
  6      852         3 My street
  7      741         3 My street
  8      NULL        3 My street

Я хочу удалить все строки с одинаковым адресом, где хотя бы один из personnum = NULL

Таким образом, из вышесказанного мне необходимо удалить RowID 1, 2, 3, 6, 7, 8.

RowID 4 и 5 в порядке, так как они имеют PersonNum. Как мне добиться этого в T SQL? Возможно ли это с помощью CTE?

Ответы [ 2 ]

5 голосов
/ 07 января 2020

Вы можете использовать EXISTS:

DELETE t
FROM table t
WHERE EXISTS (SELECT 1 
              FROM table t1 
              WHERE t1.Address1 = t.Address1 AND t1.PersonNum IS NULL
             ); 
4 голосов
/ 07 января 2020

Рассмотрим это решение CTE:

with cte as (
    select 
        max(case when PersonNum is null then 1 end) over(partition by Address1) has_null
    from mytable
)
delete from cte where has_null = 1

Внутреннее окно max() проверяет, имеет ли хотя бы одна запись значение PersonNum, равное null для текущего Address1. Внешний запрос удаляет помеченные записи.

...