这些语句具有不同的结果,第一个语句显示2个结果,包括空答案,而第二个语句显示1个结果,没有空答案。但为什么?与ON条件分开使用ON(语句... AND语句...)有何区别?我已经阅读了很多有关该主题的内容,但不了解我所读的内容。如果有人能简单地解释一下,我将不胜感激。
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';
答案 0 :(得分:0)
您所指的条件:
AND s.LOCATION = 'RM30'
(请限定列名!)
当LEFT JOIN
与第二张表不匹配时(以及所有匹配的对),所有行都保留在第一张表中。如果不匹配,则第二个表中的值为NULL
。
当条件在WHERE
子句中时:
WHERE s.LOCATION = 'RM30'
然后,对于不匹配的行,s.LOCATION
是NULL
。因此,条件失败(WHERE
同时过滤出NULL
和“ false”条件)。换句话说,LEFT JOIN
变成了INNER JOIN
。
当然,当此条件位于ON
子句中时,由于LEFT JOIN
的定义,因此不会进行此类过滤。
答案 1 :(得分:0)
Left outer join
可以提供与匹配记录无关的结果,但是where condition
可以过滤出结果(即,仅为匹配记录提供结果)