Теория вопроса здесь:
Почему указание table.field IS NULL или table.field IS NOT NULL не работает на условие соединения (например, влево или вправо), но только в условии where?
Не работает Пример:
-это должно возвращать все отправления с любыми возвращаемыми (не нулевыми значениями) фильтрами. Однако это возвращает все отправления независимо от того, что-либо встречает оператор [r.id is null].
SELECT
*
FROM
shipments s
LEFT OUTER JOIN returns r
ON s.id = r.id
AND r.id is null
WHERE
s.day >= CURDATE() - INTERVAL 10 DAY
Рабочий пример:
-Это возвращает правильное количество строк, которое является полным количеством отправлений, меньше любых связанных с возвратом (не нулевые значения).
SELECT
*
FROM
shipments s
LEFT OUTER JOIN returns r
ON s.id = r.id
WHERE
s.day >= CURDATE() - INTERVAL 10 DAY
AND r.id is null
Почему это так? Все остальные условия фильтрации между двумя соединяемыми таблицами работают очень хорошо, но по какой-то причине фильтры IS NULL и NOT NULL не работают, если только в инструкции where.
В чем причина этого?