2014-10-10 63 views
0

加入我有3個表,如:甲骨文左外有兩個表

create table KOPA (MISS VARCHAR2(12), SER NUMBER(10)); 
create table NOTI (MISS VARCHAR2(12), LAI NUMBER(10), BAI NUMBER(10), ZAI NUMBER(10), KAI UMBER(10)); 
create table DOSI (MISS VARCHAR2(12), MAI NUMBER(10)); 

INSERT INTO KOPA (MISS,SER) VALUES ('AAA',123); 
INSERT INTO KOPA (MISS,SER) VALUES ('BBB',234); 
INSERT INTO KOPA (MISS,SER) VALUES ('CCC',345); 
INSERT INTO KOPA (MISS,SER) VALUES ('DDD',456); 
INSERT INTO KOPA (MISS,SER) VALUES ('EEE',567); 
INSERT INTO KOPA (MISS,SER) VALUES ('TTT',456); 
INSERT INTO KOPA (MISS,SER) VALUES ('YYY',567); 
INSERT INTO KOPA (MISS,SER) VALUES ('III',456); 

INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('AAA',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('BBB',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('CCC',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('FFF',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('GGG',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('HHH',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('III',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('JJJ',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('KKK',1,2,3,NULL); 
INSERT INTO NOTI (MISS,LAI,BAI,ZAI,KAI) VALUES ('LLL',1,2,3,NULL); 

INSERT INTO DOSI (MISS,MAI) VALUES ('BBB',4); 
INSERT INTO DOSI (MISS,MAI) VALUES ('CCC',1); 
INSERT INTO DOSI (MISS,MAI) VALUES ('DDD',2); 
INSERT INTO DOSI (MISS,MAI) VALUES ('EEE',3); 

SELECT * FROM KOPA A; 
SELECT * FROM NOTI H; 
SELECT * FROM DOSI B; 

我在尋找的結果是:

a.miss a.ser h.lai h.bai h.zai b.miss b.mai 
AAA 123 1  2  3  null null 
BBB 234 1  2  3  BBB 4 
CCC 345 1  2  3  CCC 1 
DDD 456 null null null DDD 2 
EEE 567 null null null EEE 3 
III 456 1  2  3  null null 

所以 - 問題是 - 我怎麼能得到兩個外部連接與一個表? 事情是這樣的:

select z.*,b.* 
from (select a.miss,h.lai,h.bai from kopa a,noti h 
where a.miss=h.miss and h.lai=1 and h.bai=2)z 
full outer join dosi b on b.miss=z.miss 

而已,有顯示每行a.miss的一種方式?

回答

2

與此查詢應該得到你所期望的樣本數據結果:

select a.miss, a.ser, h.lai, h.bai, h.zai, b.miss, b.mai 
from kopa a 
left join noti h on a.miss = h.miss and h.lai = 1 and h.bai = 2 
left join dosi b on b.miss = a.miss 
where h.miss is not null or b.miss is not null 
order by a.miss 

輸出:

miss  ser   lai   bai   zai   miss   mai 
-------- ----------- ----------- ----------- ----------- ------------ ----------- 
AAA  123   1   2   3   NULL   NULL 
BBB  234   1   2   3   BBB   4 
CCC  345   1   2   3   CCC   1 
DDD  456   NULL  NULL  NULL  DDD   2 
EEE  567   NULL  NULL  NULL  EEE   3 
III  456   1   2   3   NULL   NULL 

Sample SQL Fiddle

1

有沒有在每一行顯示a.miss的方法?

要在每行使用顯示a.miss LEFT JOIN

試試這個

select a.miss as a_miss, a.ser, h.lai, h.bai, h.zai, b.miss as b_miss, b.mai 
from Kopa a 
left outer join noti h on h.miss=a.miss 
full outer join dosi b on b.miss=a.miss 
ORDER BY a.miss 

SQL小提琴http://sqlfiddle.com/#!4/92e99/9