据我所知,在两个表之间的左外连接(例如a& b)中,无论右表中行的值如何,都会检索连接左侧表的所有行。那为什么我们需要一个' ON'指定条件的子句,如下所示:
select * from a LEFT OUTER JOIN b on a.some_column1 = b.some_column2;
为什么需要声明" a.some_column1 = b.some_column2"。
答案 0 :(得分:5)
left join
将返回表a
中的所有行,并且对于每一行,表b
中的匹配行(如果存在) - 如果不存在,则{{1将返回s而不是null
列。 b
子句定义了匹配的完成方式。
答案 1 :(得分:1)
据我所知,在两个表之间的左外连接(例如a& b)中,无论右表中行的值如何,都会检索连接左侧表的所有行。
这是正确的,因为它说的是left join on
返回的内容,但它不是它返回的definition。 left join on
返回inner join on
行加上(union all
)由空值扩展的不匹配的左表行。
inner join on
返回满足cross join
条件的on
行 - 这可能是列上的任何条件。 cross join
返回左表格中的一行的每个组合。右表中的一行。
如果没有outer join
,您期望on
是什么意思?在标准SQL outer
& inner
join
必须有on
。 inner join
on
真实条件与cross join
相同。哪个没有不匹配的左表行。因此,如果您希望outer join
没有on
表示outer join
on
真实条件,那么inner join
{{1}中没有不匹配的行那个条件,结果也只是on
。 (MySQL允许在没有cross join
的情况下使用inner join
,但它只是意味着on
。)
答案 2 :(得分:0)
由于您是"加入",因此需要on
子句,并且您需要告知要加入的列。否则,您将对所有可能的行组合使用传统的from
,而不使用任何where
条件。但你想要加入,对吗?
是的,这几乎就是这样。