3

我在某处读到右表(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
4

1 回答 1

1

不同之处在于它WHERE j.jobStatus = "A"取消了LEFT JOIN,本质上使其成为INNER JOIN. j 为 NULL 的任何行都会被该条件过滤掉。

如果条件在ON子句上,它仍然允许NULL为作业表返回行(即,公司表中的行在作业表中没有匹配的行)。

于 2013-05-23T14:58:51.077 回答