簡體   English   中英

SQL查詢合並結果表的一列中的兩個表的兩列?

[英]SQL query merge two columns from two tables in one column of resulting table?

我有以下表格:

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)的摘要T2+T3 (FOR ID=1 2+1=3)但是對於ID=2它也應該存在於具有空白第二列的表輸出中。

你可以簡單地使用子查詢中的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

此外,如果要自定義具有null值的列,則可以使用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演示

你想要工會/工會嗎?

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可能不是最有效的方法。 但這是你的目標嗎?

你可以試試這個。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM