使用 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
努力使用 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