! = в MySQL не работает, как я ожидал - PullRequest
1 голос
/ 09 марта 2011

У меня есть запрос, который работал нормально, а затем я хотел добавить к существующему условию where что-то вроде: и some_column! = 1

Значение этого столбца было нулевымНо запрос перестал находить строку, которую он использовал для поиска.Есть идеи почему?

Спасибо.Alex

Ответы [ 4 ]

2 голосов
/ 09 марта 2011

SQL почти в каждой форме печально известен своей обработкой нулевых значений в сравнениях.Если столбец обнуляем и вы хотите сравнить его, вы должны использовать ISNULL:

WHERE ISNULL(column_name, -1) != 0

Это должно решить вашу проблему.

2 голосов
/ 09 марта 2011

Почти любое выражение с нулем равно нулю.1 != null НЕИЗВЕСТНО (и, следовательно, приведет к удалению строки из набора результатов).1 = null НЕИЗВЕСТНО.1 + null - НЕИЗВЕСТНО.

Самое значительное исключение: null is null - ИСТИНА.

1 голос
/ 09 марта 2011

NULL, по определению, является «неизвестным значением» ... Следовательно, null! = 1 является неизвестным результатом. NULL может быть 1, а может и не быть, но ключ в том, что SQL не будет пытаться угадать. Это своего рода странный способ обработки значения в SQL, но это так.

Поэтому, если вы хотите учесть возможные пустые значения, вам нужно изменить свое местоположение на это:

AND some_column != 1 AND some_column IS NOT NULL
0 голосов
/ 09 марта 2011

использование '<>' может сработать ... можно попробовать

where ISNULL(coloumn_name,1) <> 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...