почему, когда я использую <> в SQL, он не получает нулевое значение - PullRequest
2 голосов
/ 02 декабря 2011

Пример У меня есть следующие записи на column_name "color": синий, красный, зеленый, нуль ... когда я делаю запрос выбора .. выберите * из таблицы имя, где цвет <> красный ... SQL должен вернуть все записи, кроме тех, которые имеют красный цвет, верно? Почему это не показывает те значения, которые имеют ноль в качестве цвета? Спасибо!

Ответы [ 4 ]

6 голосов
/ 02 декабря 2011

Как правило, любое сравнение с NULL возвращает false. Если вы также хотите получить NULL строк, вам придется явно запросить их:

color <> 'red' OR color IS NULL
0 голосов
/ 02 декабря 2011

На сервере Sql для сравнения любого значения со значением NULL необходимо использовать IS NULL или IS NOT NULL

Таким образом, ваш запрос будет

Select * from table_name where color IS NOT NULL
0 голосов
/ 02 декабря 2011

Посмотрите на SET ANSI_NULLS , чтобы понять, почему это происходит.

Когда SET ANSI_NULLS выключено, равно (=) и не равно (<>) операторы сравнения не следуют стандарту ISO.[...] оператор SELECT, использующий WHERE имя_ столбца <> XYZ_value, возвращает все строки, которые не являются XYZ_value и не являются NULL.

Обновление: извините, это для SQLСервер, и ваш вопрос - Oracle, однако я оставлю это здесь, так как это, вероятно, все еще актуально.

0 голосов
/ 02 декабря 2011

Используйте где isnull (цвет, '') <> 'красный'

Ноль не является значением. То же самое относится к средним, суммам и т. Д.

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