【问题标题】:UNION ALL Sql query - how to bind three tablesUNION ALL Sql 查询——如何绑定三张表
【发布时间】:2012-09-26 04:23:40
【问题描述】:

我有以下表格:

T1

  ID  PRIORITY
  1      1
  2      1
  3      2
  4      4

T2

ID  SERVICE
1   PSTN
1   ADSL
3   ADSL

T3

ID   DEVICE
1    BSC1
3    BSC7 
4    BSC7

我想作为输出

ID  PRIORITY SERVICE/DEVICE
1      1        PSTN
1      1        ADSL
1      1        BSC1
2      1
3      2        ADSL
3      2        BSC7

如何使用 UNION ALL 绑定这些表?我还必须为 T1 WHERE PRIORITY!=4 放置 WHERE 子句

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

谢谢

【问题讨论】:

    标签: sql db2 union union-all


    【解决方案1】:

    如果您只使用UNION 而不是UNION ALL 没问题,这应该可以满足您的需求

    SELECT t1.Id, t1.Priority, COALESCE(t2.Service, '') AS [Service/Device]
    FROM t1
    LEFT JOIN t2 ON t1.Id = t2.Id
    WHERE t1.Priority != 4
    
    UNION 
    
    SELECT t1.Id, t1.Priority, COALESCE(t3.Device, '') AS [Service/Device]
    FROM t1
    LEFT JOIN t3 ON t1.Id = t3.Id
    WHERE t1.Priority != 4
    

    SQL Fiddle example

    【讨论】:

    • 感谢您的回复...我会尽快尝试,但您确定我会得到重复的 ID 值,因为这是我想要的吗?
    • 对于 id 2,我会在服务/设备列中得到 null 或空白输出吗?空白更合适,但我在 Fiddle 中看到有 null?
    • @Dejan 我已经更新了我的答案,为您返回空白而不是 NULL。如果这是您想要的输出,请告诉我
    【解决方案2】:
    select T1.id , T1.PRIORITY ,T2.SERVICE  as service/Device from  t1 
    left outer join T2 on T2.id=T1.id where T1.PRIORITY!=4
    union all
    select T1.id , T1.PRIORITY ,T3.DEVICE as service/Device from  t1 
    left outer join T3 on T3.id=T1.id where PRIORITY!=4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多