Можно ли сопоставить значения NULL с оператором IN? (x IN (NULL, a, b)) - PullRequest
2 голосов
/ 08 декабря 2011

Можно ли удалить пустые значения в столбце в операторе удаления, который также использует IN?

Вот следующая строка, и все записи с STATUS (имя столбца btw) в строке удаляются.За исключением записей со столбцом NULL STATUS.

DELETE FROM PRODUCTS
WHERE [STATUS] IN (NULL,'09','12','13','A1','C1','H1','J1','S1','T1');

Ответы [ 5 ]

4 голосов
/ 08 декабря 2011

Нет, вы не можете включить NULL в предложение IN. Представьте, что IN расширяется до серии OR, так что вы получите:

...WHERE [STATUS] = NULL OR [STATUS] = '09'...

, который не даст того, что вы ожидаете. Вместо этого обработайте NULL-условие независимо от остальных:

DELETE FROM PRODUCTS 
    WHERE [STATUS] IS NULL
        OR [STATUS] IN ('09','12','13','A1','C1','H1','J1','S1','T1');
3 голосов
/ 08 декабря 2011

1001 * попробовать *

COALESCE(STATUS IN (...),TRUE)
1 голос
/ 08 декабря 2011

Вы не можете включить совпадение с NULL, как это. Вместо этого включите отдельное предложение WHERE:

DELETE FROM PRODUCTS WHERE [STATUS IS NULL] OR [STATUS] IN ('09','12','13','A1','C1','H1','J1','S1','T1');
1 голос
/ 08 декабря 2011

Нет, вы не можете этого сделать, потому что IN использует =, и вам нужно IS, чтобы проверить NULL. Просто сделай это отдельно:

DELETE FROM PRODUCTS
    WHERE STATUS IS NULL
    OR STATUS IN ('09','12','13','A1','C1','H1','J1','S1','T1');
0 голосов
/ 08 декабря 2011
DELETE 
  FROM products
 WHERE COALESCE(STATUS, '09') 
          IN ('09', '12', '13', 'A1', 'C1', 'H1', 'J1', 'S1', 'T1');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...