SQL查询合并结果表的一列中两个表的两列?

问题描述:

我有以下表: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,它也应该存在于表格输出中,其空白第二列。

你想要工会/工会吗?

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可能无法做到这一点的最有效方法。但这是你想要达到的结果吗?

你可以简单地使用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

你可以试试这个。

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(+);