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 JOIN
T1
专门T2
和T3
使用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(+);