右连接无法转换为左连接的示例?

时间:2016-06-05 13:26:38

标签: sql

我知道Any Right可以转换为Left Join。 但有什么例子可以说这件事不可能发生

2 个答案:

答案 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

但是,这并非严格属实。一个明显的区别是,第一个可能代表joinc之间的a条件。如果这是唯一的条件,第二个有麻烦。

第一个被解析为:

from (a right join b) right join c

这意味着第一行将b中与{a>}匹配的所有行都保持不变。 。 。然后c中的所有行,即使b中没有匹配项也是如此。

第二个:

from (c left join b) left join a

这意味着保留c中的所有行,无论ba中的匹配如何。

一个区别是a中匹配c但不匹配b的行。在left join版本中,a列的值将来自a。在right join版本中,值为NULL。当然,这取决于on条款;重点是存在细微差别。

我不想思考这些事情。所以,我基本上从不使用right joinLeft join遵循SQL的解析规则,它有一个简单的解释:保留第一个表中的所有行,而不管其他任何行中的匹配。

答案 1 :(得分:-1)

只提供现代JOIN ... ON语法专用,使用另一个LEFTRIGHT外连接的查询的制定总是可以通过同时反转来重新制定JOIN每一侧的子查询的顺序。

  

正如可以预料的那样,单向(:EFT和RIGHT)连接 不是可交换的,因为反转它们的表参数逻辑上将左join变为右{{1}反之亦然,使语义和结果大不相同。 Advanced Standard SQL Dynamic Structured Data Modeling and Hierarchical Processing; 2013; Michael M. David & Lee Fesperman.第19页