我在某处读到右表(j.jobStatus =“A”)的条件必须放在where子句之前。
1)和2)之间是否存在差异?
1)
SELECT c.cmpID
FROM company AS c
LEFT JOIN jobs AS j ON c.jobID=j.jobID
WHERE j.jobStatus="A" AND c.cmID > 10
2)
SELECT c.cmpID
FROM company AS c
LEFT JOIN jobs AS j ON c.jobID=j.jobID AND j.jobStatus="A"
WHERE c.cmID > 10
答案 0 :(得分:1)
区别在于WHERE j.jobStatus = "A"
使LEFT JOIN
无效,基本上使其成为INNER JOIN
。 j将为NULL的任何行都将被该条件过滤掉。
如果条件在ON
子句上,它仍然允许为jobs表返回NULL
行(即,company表中没有jobs表中匹配行的行)。