我有以下表格:
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
如何合并?
我无法使用经典LEFT OUTER JOIN
。
一个id的输出表中的总数应该是T2+T3 (FOR ID=1 2+1=3)
的摘要,但对于ID=2
,它也应该存在于表输出中,并且空白的第二列。
答案 0 :(得分:7)
您可以在子查询中使用T2
将T3
和union
两个表的结果简单地结合起来,然后使用T1
将LEFT JOIN
加入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
{{1}}
答案 1 :(得分: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
NOT IN
子句中的WHERE
可能不是最有效的方法。但这是你的目标吗?
答案 2 :(得分: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(+);