我有兩個表,我想從這兩個表中獲取所有資料。 如果這兩個表有一個匹配的 AssetID,那么就在一條記錄上連接它們。如果沒有,那就在不同的行上連接。 一個完全的外部連接聽起來是正確的方法,但我有一個問題,即如何根據它來自哪個表來選擇鍵。
TABLE A TABLE B
資產ID | 貴重資產ID | 受保護資產
------------------- -------------------
123 | Yes 123 | Yes
456 | No 321 | No
653 | Yes
目標:
TABLE C
資產ID | Valuable | Protected
---------------------------
123 | Yes |Yes
456 | No |
653 | Yes |
321 | |No
SELECT TableA.AssetID, TableA.Valuable, TableB.Protected
FROM (
SELECT AssetID, Valuable
FROM TableA
) ta
FULL OUTER JOIN (
SELECT AssetID, Protected
FROM TableB
) tb ON ta.AssetID=tb.AssetID
產生
表C
AssetID | Valuable | Protected
---------------------------
123 | Yes |Yes
456 | No |
653 | Yes |
| |No <<< 問題
---------------------------
而我卻錯過了關鍵
uj5u.com熱心網友回復:
你可以使用coalesce來從任何表中獲取非空的assetID:
SELECT COALESCE(TableA.AssetID, TableB.AssetID) TableA.Valuable, TableB.Protected
FROM(TableA.AssetID)
(
SELECT[/span
資產ID。
價值
FROM[/span
表A
) ta
FULL OUTER JOIN
(SELECT)
資產ID。
受保護的
FROM (SELECT AssetID, Protected)
表B
) tb
ON ta.AssetID=tb.AssetID
注意:你可能不需要這些子查詢,但省略它們可以大大簡化查詢:
SELECT COALESCE(TableA.AssetID, TableB.AssetID) TableA.Valuable, TableB.Protected
FROM表A
FULL OUTER JOIN TableB
ON TableA.AssetID=TableB.AssetID
uj5u.com熱心網友回復:
為了處理Null值,我們使用Coalesce函式。另外,我們可以使用左聯接和右聯接來代替全聯接。
SELECT COALESCE(TABLEA.AssetID,TABLEB.AssetId) AS
資產Id,TABLEA.Valuable,TABLEB.Protected
FROM TABLEA
LEFT JOIN
TABLEB ON TABLEA.AssetID = TABLEB.AssetID
UNION[/span
SELECT COALESCE(TABLEA.AssetID,T1.AssetID) as
資產ID,TABLEA.Valuable,T1.Protected FROM TABLEA
RIGHT JOIN
TABLEB T1 ON TABLEA.AssetID=T1.AssetID
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311051.html
標籤:
