Вот является sqlfiddle двух тестовых таблиц: http://sqlfiddle.com/#!9/33361/3Почему SQL-запрос с! = 0 не включает значения NULL?
ТЛ; др: почему делает SQL-запрос с != 0
не включают NULL
значения?
Я ЛЕВАЯ ПРИСОЕДИНИТЬСЯ к двум таблицам. Я хотел бы видеть строки, которые либо имеют NULL
в tableB.field1
, либо 1
в tableB.field1
, но исключают все, у кого есть 0
в tableB.field1
.
Я думаю, что этот запрос (пример 6) должен дать мне этот результат, но он не получит нулевые записи.
SELECT * FROM tableA a
LEFT JOIN tableB b ON a.id = b.join_id
WHERE
b.field1 != 0;
Я должен использовать этот длинный запрос (пример 4):
SELECT * FROM tableA a
LEFT JOIN tableB b ON a.id = b.join_id
WHERE
b.field1 != 0 OR b.field1 IS NULL;
Просто интересно больше всего - как же MySQL не считает NULL быть = 0!?
Когда я переместить условный к пункту О, я получаю неожиданную строку:
mysql> SELECT * FROM tableA a
-> LEFT JOIN tableB b ON a.id = b.join_id AND b.field1 != 0;
+------+--------+--------+---------+--------+--------+
| id | field1 | field2 | join_id | field1 | field2 |
+------+--------+--------+---------+--------+--------+
| 1 | testA1 | testA1 | 1 | 1 | testB1 |
| 2 | testA2 | testA2 | NULL | NULL | NULL |
| 3 | testA3 | testA3 | NULL | NULL | NULL |
+------+--------+--------+---------+--------+--------+
3 rows in set (0.00 sec)
Первый пример отрицая 'внешний join' - вы можете двигаться, что критерии к' on' и он должен работать нормально без 'null' проверить. – sgeddes