[英]SQL - merge two queries with different number of columns in select statement into one
[英]SQL select merge two columns into one
我有四張桌子:
表A:
ID | B_ID
----------
1 | 5
2 | 6
3 | 7
4 | 8
表B:
B_ID
-----
5
6
7
8
表C:
C_ID | C_Name
--------------
5 | Alpha
6 | Beta
表D:
D_ID | D_Name
--------------
7 | Delta
8 | Gamma
注意,表B中的值可以來自表C或表D.
我現在需要一個顯示表A中ID
的查詢和一個名為Name
的第二列,它由基於表B的B_ID
列的相應名稱組成。
預期結果應如下所示:
ID | Name
----------
1 | Alpha
2 | Beta
3 | Delta
4 | Gamma
我試過的是這個查詢:
SELECT *
FROM B
LEFT OUTER JOIN C
ON B_ID = C_ID
LEFT OUTER JOIN D
ON B_ID = D_ID
這會產生:
B_ID | C_ID | C_Name | D_ID | D_Name
-------------------------------------
5 | 5 | Alpha | Null | Null
6 | 6 | Beta | Null | Null
7 | Null | Null | Null | Delta
8 | Null | Null | Null | Gamma
但是,我還有兩個問題:
SELECT
子查詢才能顯示表A的ID
列。 這是使用帶有union all
的子查詢的一個選項:
select a.id, b.name
from tablea a
join (select id, name from tablec
union all select id, name from tabled) b on a.B_ID = b.id
您可以將*
替換為您想要的表達式
SELECT B.B_ID
, COAELESCE(C.C_NAME,D.D_NAME) AS `Name`
在表A中添加連接並不難......
SELECT A.A_ID AS `Id`
, COAELESCE(C.C_NAME,D.D_NAME) AS `Name`
FROM A
LEFT
JOIN B
ON B.B_ID = A.B_ID
LEFT
JOIN C
ON C.C_ID = B.B_ID
LEFT
JOIN D
ON D.D_ID = B.B_ID
ORDER
BY A.A_ID
如果您需要對NULL值進行不同的處理,或者為了處理可能的重復ID值,可以調整查詢。 (示例查詢假定x_ID列的唯一值。)
鑒於已定義的表,我建議以下查詢:
SELECT A.ID, C.C_NAME
FROM @A A INNER JOIN @C C ON A.B_ID=C.C_ID
UNION
SELECT A.ID, D.D_NAME
FROM @A A INNER JOIN @D D ON A.B_ID=D.D_ID
如果您認為可能存在重復的值並且您需要它們,請使用UNION ALL
而不是UNION
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.