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

时间:2012-10-03 13:41:00

标签: sql select db2

我有以下表格:

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,它也应该存在于表输出中,并且空白的第二列。

3 个答案:

答案 0 :(得分:7)

您可以在子查询中使用T2T3union两个表的结果简单地结合起来,然后使用T1LEFT 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}}

See SQLFiddle Demo

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