Почему условие в предложении ON и предложении WHERE приводит к разным результатам? - PullRequest
0 голосов
/ 10 ноября 2018

Эти операторы имеют разные результаты: первый выводит 2 результата, включая нулевые ответы, тогда как второй оператор отображает 1 результат, который не имеет нулевых ответов. Но почему? Чем использование ON (оператор ... оператор AND ...) отличается от простого использования AND, отдельно от условия ON? Я много читал на эту тему, но не понимаю, что я читаю. Если бы кто-то мог объяснить это простыми словами, я был бы признателен.

SELECT E.EMPLOYEE_NO, S.SECTION_NO, S.START_DATE_TIME, S.LOCATION
FROM EMPLOYEE E LEFT OUTER JOIN SECTION S 
ON (S.COURSE_NO = E.EMPLOYEE_NO
AND OFFICE = 'RM30')
WHERE E.RECORD = 14;

SELECT E.EMPLOYEE_NO, S.SECTION_NO, S.START_DATE_TIME, 
S.OFFICE
FROM EMPLOYEE E LEFT OUTER JOIN SECTION S 
ON S.COURSE_NO = E.EMPLOYEE_NO
WHERE E.RECORD = 14
AND OFFICE = 'RM30';

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Left outer join может предоставить результат независимо от совпадающих записей, но where condition отфильтровать результат (т. Е. Он даст результат только для совпадающей записи)

0 голосов
/ 10 ноября 2018

Вы ссылаетесь на условие:

AND s.LOCATION = 'RM30'

(Пожалуйста, уточните названия столбцов!)

A LEFT JOIN сохраняет все строки в первой таблице, когда нет совпадения со второй таблицей (а также все совпадающие пары). Когда нет совпадения, значения из второй таблицы NULL.

Когда условие в предложении WHERE:

WHERE s.LOCATION = 'RM30'

затем s.LOCATION равно NULL для несовпадающих строк. Таким образом, условие не выполняется (WHERE отфильтровывает как NULL, так и "ложные" условия). Другими словами, LEFT JOIN превращается в INNER JOIN.

Конечно, когда это условие содержится в предложении ON, такая фильтрация не выполняется из-за определения LEFT JOIN.

...