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

4

I have the following tables:

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的总和(对于ID=1 2+1=3),但是对于ID=2,它也应该存在于输出表格中,但是第二列应该为空白。

3个回答

7
您可以简单地通过在子查询中使用union将两个表的结果合并,具体来说是T2T3,然后再用LEFT JOIN将其与T1连接。请尝试以下操作:
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。因此,在下面的示例中,由于 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

查看 SQLFiddle 演示


2
你可以尝试这个。
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(+);

1
你想要使用 union/union all 吗?
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可能不是最有效的方法。但这是您想要的结果吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接