在同一个 SELECT 中使用右外连接和左外连接

Kir*_*ers 2 sql-server

我希望更好地建立我的 SQL 开发技能集。我目前工作的大部分数据都符合层次结构,我们几乎总是从最顶层的元素开始“向下”工作。这导致实际上只需要使用INNERLEFT OUTER连接各种查询。

我希望在我可能需要在同一个查询中使用 aRIGHT OUTERLEFT OUTERJOIN的情况下获得一些指导。

参考 StackOverflow 上的一个问题左联接、右联接、外联接和内联接有什么区别?我明白 aRIGHT OUTERLEFT OUTERJOIN 是什么,但是我被要求解决的所有问题都可以仅使用INNERLEFT OUTER连接来解决。

编辑:

我确实发现这基本上是之前 StackOverflow 问题的重复,何时或为什么使用右外连接而不是左连接?. 似乎普遍存在一种共识,即

  1. 大多数使用 a 的查询RIGHT OUTER JOIN都可以转换为 INNERandLEFT OUTER版本。
  2. 有用于读取能力,格式化或组织过程的一些好处,这可能需要使用RIGHT OUTER的替代LEFT OUTER

在该问题上还有一个答案,其中详细说明了您将INNER JOIN一组表放在一起的特定情况,然后RIGHT OUTER JOIN找到“正确”表在整个INNER JOIN'ed 子集中的记录位置。我认为这可以通过一个INNER JOINLEFT OUTER JOIN版本来完成,它只需要一些工作。

Dav*_*oft 7

在实践中,您永远不需要使用 RIGHT JOIN,而且我想不出我想要的场景。

任何涉及 RIGHT JOIN 的查询,如果不能简单地转换为仅使用 LEFT JOIN 的查询,可能应该用火烧掉。

您可以使用 CTE 管道解决几乎任何问题,每个 CTE 使用 0 个或多个 INNER JOIN 后跟 0 个或多个 LEFT JOIN。