使用 Oracle 外连接链接多个表

Linking multiple tables with an Oracle outer join

努力使用 Oracle 外连接语法。

我们有这个带有内连接和外连接的查询;

SELECT A.aa, B.bb, C.cc, D.dd
FROM
  TABLEA A, TABLEB B, TABLEC C, TABLED D
WHERE
  A.XX = B.XX AND
  B.YY = C.YY AND
  C.ZZ = D.WW (+)

查询工作正常。现在的一个变化是 table A 和 B(在 XX 上)之间的 link 可能不存在。

所以我们想把它变成一个外部连接,其中 returns 数据不管现有的连接是否满足,或者如果 A 和 B 之间没有 link(以及另一个tables).

你怎么做到的?

假设您有如下表格:

insert into tableA values (1);
insert into tableA values (2);
insert into tableB values ( 1, 10);
insert into tableB values ( -2, 20);
insert into tableC values ( 10, 100);
insert into tableC values ( 20, 200);
insert into tableD values ( 200);
insert into tableD values ( 999);

如果我理解得很好,即使在B和C上也需要使用on outer join,而不仅仅是D;在旧的 Oracle 语法中是:

SELECT *
FROM
  TABLEA A, TABLEB B, TABLEC C, TABLED D
WHERE
  A.XX = B.XX(+) AND
  B.YY = C.YY(+) AND
  C.ZZ = D.WW (+)

并且在(更好的)ANSI SQL:

select *
from tableA A
       left outer join
     tableB B on ( A.xx = B.xx)
       left outer join 
     tableC C on ( B.yy = C.yy)
       left outer join
     tableD D on ( C.zz = D.ww)

他们都给予:

        XX         XX         YY         YY         ZZ         WW
---------- ---------- ---------- ---------- ---------- ----------
         2
         1          1         10         10        100