我使用这个已经多年了,所以现在是时候完全理解它了。比方说一个像这样的查询:
SELECT
*
FROM a
LEFT JOIN b ON foo...
LEFT JOIN c ON bar...
文档告诉我们:
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression
LEFT OUTER JOIN
首先执行内部连接。 然后,对于T1中任何一行与T2中的任何行都不满足连接条件的情况,将添加一个具有T2列中的空值的连接行。 因此,连接表始终至少有每个T1行的一行。
问题很简单:在这种情况下,T1
是什么? 是a
吗? 还是a LEFT JOIN b ON foo
?(或者是一样的吗?)
(a left join b) left join c
,即首先将a
作为左表,然后将(a left join b)
作为下一个左表。 - jarlhLEFT [OUTER] JOIN
时,您要求它保留此语句 (a
) 左侧表格中的所有行,而不管下一个指定的表格 (b
) 中是否有任何与您的布尔表达式匹配的行。 - CactusCake