使用Oracle外连接链接多个表

时间:2016-12-16 22:27:04

标签: sql 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 (+)

查询工作正常。现在改变是表A和B(在XX上)之间的链接可能不存在。

因此,我们希望将其转换为外部联接,无论是否满足现有联接,或者A和B(以及其他表)之间没有链接,都会返回数据。

你怎么能这样做?

1 个答案:

答案 0 :(得分:3)

假设您的表格如下:

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上使用外连接,而不仅仅是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