使用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(以及其他表)之间没有链接,都会返回数据。
你怎么能这样做?
答案 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