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

Dej*_*jan 4 sql db2 select

我有以下表格:

T1

  ID 
  1
  2
  3
Run Code Online (Sandbox Code Playgroud)

T2

ID  SERVICE
1   PSTN
1   ADSL
3   ADSL
Run Code Online (Sandbox Code Playgroud)

T3

ID   DEV
1    3G
3    2G 
Run Code Online (Sandbox Code Playgroud)

我想作为输出

ID  SERVICE/DEV
1      PSTN
1      ADSL
1      3G
2
3      ADSL
3     2G
Run Code Online (Sandbox Code Playgroud)

如何合并?

我不能用经典LEFT OUTER JOIN.

输出表中一个id的总数应该是摘要,T2+T3 (FOR ID=1 2+1=3)但是对于ID=2它也应该存在于具有空白第二列的表输出中.

Joh*_*Woo 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
Run Code Online (Sandbox Code Playgroud)

此外,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
Run Code Online (Sandbox Code Playgroud)

请参阅SQLFiddle演示