2012-10-03 127 views
4

我有以下表:SQL查詢合併結果表的一列中兩個表的兩列?

T1

ID 
    1 
    2 
    3 

T2

ID SERVICE 
1 PSTN 
1 ADSL 
3 ADSL 

T3

ID DEV 
1 3G 
3 2G 

欲作爲輸出

ID SERVICE/DEV 
1  PSTN 
1  ADSL 
1  3G 
2 
3  ADSL 
3  2G 

如何合併?我不能使用經典。

對於一個id,輸出表中的總數應該是T2+T3 (FOR ID=1 2+1=3)的摘要,但對於ID=2,它也應該存在於表格輸出中,其空白第二列。

回答

1

你想要工會/工會嗎?

select * 
from ((select id, service 
     from t2 
    ) union all 
     (select id, service 
     from t3 
    ) union all 
     (select id, NULL as service 
     from t1 
     where t1.id not in (select id from t2) and 
      t1.id not in (select id from t3) 
    ) 
    ) t 

WHERE子句中的NOT IN可能無法做到這一點的最有效方法。但這是你想要達到的結果嗎?

7

你可以簡單地使用LEFT JOINT1專門T2T3使用union子查詢中的兩個表的結果,後來加入它結合起來。試試這個,

SELECT t1.ID, b.Service 
FROM T1 LEFT JOIN 
    (
     SELECT ID, Service FROM T2 
     UNION ALL 
     SELECT ID, Dev AS Service FROM T3 
    ) b ON t1.ID = b.ID 

此外,還可以使用COALESCE如果你想定製具有null值的列。因此,在下面的例子中,由於2沒有服務,它會顯示的-none-代替null

SELECT t1.ID, COALESCE(b.Service, '-none-') Service 
FROM T1 LEFT JOIN 
    (
     SELECT ID, Service FROM T2 
     UNION ALL 
     SELECT ID, Dev AS Service FROM T3 
    ) b ON t1.ID = b.ID 

See SQLFiddle Demo

1

你可以試試這個。

SELECT T1.ID, service "SERVICE/DEV" 
FROM T1, T2 
WHERE T1.ID = T2.ID(+) 
UNION 
SELECT T1.ID, dev "service/dev" 
FROM T1, T3 
WHERE T1.ID = T3.ID(+);