MySQL значение NULL в где в CLAUSE - PullRequest
10 голосов
/ 12 октября 2010

как обращаться с NULL значением в mysql , где в CLAUSE

я пытаюсь как

SELECT * FROM mytable WHERE field IN(1,2,3,NULL)

это не работает

работает только как:

SELECT * FROM mytable WHERE field IN(1,2,3) OR field IS NULL

как я могу заставить его работать в WHERE IN?это возможно?

Ответы [ 4 ]

7 голосов
/ 12 октября 2010

Как я понимаю, вы хотите получить каждую запись с 1,2,3 и нулевым значением.

Я не думаю, что можно ввести ноль в оператор IN.Его ожидаемые значения и ноль это хорошо .. не значение.Так что вам действительно нужно поставить ИЛИ с нулем, чтобы получить желаемый результат.

6 голосов
/ 12 октября 2010

Может быть, эта информация из Справочного руководства MySQL поможет:

Чтобы соответствовать стандарту SQL, IN возвращает NULL, не только если выражение в левой части равно NULL., но также, если в списке не найдено совпадений и одно из выражений в списке NULL .

3 голосов
/ 16 августа 2018

Существует функция MySQL с именем COALESCE. Возвращает первое не-1004 * значение в списке или NULL, если нет не-1006 * значений.

Если вы, например, запустите SELECT COALESCE(NULL, NULL, -1);, вы получите -1 назад, потому что это первое не NULL значение.

Таким образом, хитрость заключается в том, чтобы заключить ваше выражение в COALESCE и добавить значение в качестве последнего параметра, который вы также добавите в функцию IN.

SELECT * FROM mytable WHERE COALESCE(field,-1) IN (1,2,3,-1)

Он будет совпадать, только если поле равно 1,2 или 3, или если поле равно NULL.

0 голосов
/ 12 декабря 2016

Следующее утверждение должно помочь:

SELECT * FROM mytable WHERE COALESCE(field,0) IN (1,2,3,0)
...