我知道Any Right可以转换为Left Join。 但有什么例子可以说这件事不可能发生
答案 0 :(得分:4)
尽管您总是可以在正确的联接和左联接之间进行转换,但在某些情况下,解析SQL语言会使这一点变得棘手。对于两个表格,这两种表格是可以互换的。但是,对于更多表,SQL解析规则会影响结果。 SQL从左到右解析from
子句,因此它隐含地放在括号中。
例如,很有可能说:
from a right join b right join c
(这是从右边的加入b ...右边加入c ...的简写,我忽略了on
条款,假设它们位于紧随其后的习惯位置联接。)
与
相同from c left join b left join a
但是,这并非严格属实。一个明显的区别是,第一个可能代表join
和c
之间的a
条件。如果这是唯一的条件,第二个有麻烦。
第一个被解析为:
from (a right join b) right join c
这意味着第一行将b
中与{a>}匹配的所有行都保持不变。 。 。然后c
中的所有行,即使b
中没有匹配项也是如此。
第二个:
from (c left join b) left join a
这意味着保留c
中的所有行,无论b
和a
中的匹配如何。
一个区别是a
中匹配c
但不匹配b
的行。在left join
版本中,a
列的值将来自a
。在right join
版本中,值为NULL
。当然,这取决于on
条款;重点是存在细微差别。
我不想思考这些事情。所以,我基本上从不使用right join
。 Left join
遵循SQL的解析规则,它有一个简单的解释:保留第一个表中的所有行,而不管其他任何行中的匹配。
答案 1 :(得分:-1)
只提供现代JOIN ... ON
语法专用,使用另一个LEFT
或RIGHT
外连接的查询的制定总是可以通过同时反转来重新制定JOIN
每一侧的子查询的顺序。
正如可以预料的那样,单向(:EFT和RIGHT)连接 不是可交换的,因为反转它们的表参数逻辑上将左
join
变为右{{1}反之亦然,使语义和结果大不相同。 Advanced Standard SQL Dynamic Structured Data Modeling and Hierarchical Processing; 2013; Michael M. David & Lee Fesperman.第19页