左外连接三个表?

时间:2014-06-09 08:38:45

标签: sql oracle left-join

我试图弄清楚具有这种结构的Oracle SQL查询:

select * from A, B, C
where
A.Col1 = B.Col1(+) and
C.Col1= A.Col1 (+)

我不习惯不推荐使用的(+)语法,所以如果有人能提供查询的ANSI翻译,我会感到沮丧。或用文字解释。

修改

Polppan的回答可能是正确的。我不确定(似乎也不是),因为我无法以某种方式验证它,仍然不完全理解(+)语法。

以下查询似乎等同于Polppan的答案,对我而言,由于保留了连接的顺序,因此将其映射到第一个查询更容易:

 SELECT * 
  FROM A
  LEFT JOIN B ON A.Col1 = B.Col1
  RIGHT JOIN C ON C.Col1 = A.Col1

如果其他人可以提供提供ANSI翻译的答案以及解释,我很乐意将其作为答案,以避免目前的不确定性。

1 个答案:

答案 0 :(得分:4)

您可以使用以下ANSI查询,根据您的意愿更改选择列。

SELECT *
  FROM C
       LEFT OUTER JOIN A
          ON C.Col1 = A.Col2
       LEFT OUTER JOIN B
          ON A.Col1 = B.Col1

This文章雄辩地解释了sql joins