Mysql не возвращает записи со значением NULL - PullRequest
0 голосов
/ 22 февраля 2020

У меня в таблице есть столбец supplier_id. Когда я применяю условие where как supplier_id <> 2, тогда оно не возвращает записи с NULL в столбце supplier_id.

Вот мой запрос:

select * from materials where supplier_id <> 2;

Однако, когда я пытаюсь использовать where supplier_id <> 2 or supplier_id is null, он возвращает действительные записи.

Ответы [ 3 ]

2 голосов
/ 22 февраля 2020

Большинство сравнений с NULL значениями возвращают NULL - и WHERE предложения отфильтровывают NULL значения. Это относится как к =, так и к <>.

. Один из вариантов - NULL безопасный оператор:

WHERE NOT supplier_id <=> 2

Обратите внимание, что стандарт SQL здесь будет следующим:

WHERE supplier_id IS DISTINCT FROM 2

Но MySQL имеет свой собственный оператор.

Или явно учитывает NULL s:

WHERE supplier_id <> 2 OR supplier_id IS NULL
0 голосов
/ 22 февраля 2020

Невозможно проверить значения NULL с помощью операторов сравнения, таких как =, <или <>. Значение NULL отличается от нулевого значения или поля, которое содержит пробелы. Поле со значением NULL - это поле, которое было оставлено пустым при создании записи.

Этот тег <> означает, что он не равен. В соответствии с вашим запросом он показывает результаты, у которых supplier_id, кроме 2, выбирается * из материалов, в которых supplier_id <> 2 или supplier_id равен нулю;

Это даст ожидаемый результат.

0 голосов
/ 22 февраля 2020

Любое сравнение с NULL с использованием операторов =, <, > или <> возвращает NULL в результате. Поэтому, если результат равен , а не TRUE, то условие:

where supplier_id <> 2

отфильтрует эти строки с supplier_id, равным NULL. Поэтому вы должны использовать:

where supplier_id <> 2 or supplier_id is null 

или использовать MySql безопасный оператор NULL:

where supplier_id <=> 2

, который делает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...