我希望更好地建立我的 SQL 开发技能集。我目前工作的大部分数据都符合层次结构,我们几乎总是从最顶层的元素开始“向下”工作。这导致实际上只需要使用INNER
和LEFT OUTER
连接各种查询。
我希望在我可能需要在同一个查询中使用 aRIGHT OUTER
和LEFT OUTER
JOIN的情况下获得一些指导。
参考 StackOverflow 上的一个问题左联接、右联接、外联接和内联接有什么区别?我明白 aRIGHT OUTER
和LEFT OUTER
JOIN 是什么,但是我被要求解决的所有问题都可以仅使用INNER
和LEFT OUTER
连接来解决。
编辑:
我确实发现这基本上是之前 StackOverflow 问题的重复,何时或为什么使用右外连接而不是左连接?. 似乎普遍存在一种共识,即
RIGHT OUTER JOIN
都可以转换为
INNER
andLEFT OUTER
版本。RIGHT OUTER
的替代LEFT OUTER
。在该问题上还有一个答案,其中详细说明了您将INNER JOIN
一组表放在一起的特定情况,然后RIGHT OUTER JOIN
找到“正确”表在整个INNER JOIN
'ed 子集中的记录位置。我认为这可以通过一个INNER JOIN
和LEFT OUTER JOIN
版本来完成,它只需要一些工作。
在实践中,您永远不需要使用 RIGHT JOIN,而且我想不出我想要的场景。
任何涉及 RIGHT JOIN 的查询,如果不能简单地转换为仅使用 LEFT JOIN 的查询,可能应该用火烧掉。
您可以使用 CTE 管道解决几乎任何问题,每个 CTE 使用 0 个或多个 INNER JOIN 后跟 0 个或多个 LEFT JOIN。