2012-09-06 76 views
-1

我有4個表,並希望以最有效的方式返回表中的鍵映射到其正確的條目。連接表並返回2個單獨的條目與NULL值

表A列:

[ SVC_PREFIX | SVC_CD | ... ] 

表B列:

[ SVC_PREFIX | SVC_CD | SVC_ID |... ] 

表C列:

[ SVC_ID | ... ] 

表d列:

[ SVC_ID | ... ] 

表A通過SVC_PREFIX和SVC_CD映射到表B然後表B然後通過SVC_ID負責檢索表C和D表C和D幾乎相同,除了表D具有比C少幾個列的列C例如,C可能有一個isGood而isSilly,但D只會有isSilly。 是否有可能檢索條目,以便D將用isSilly的NULL值提取,而C將帶來相應的數據?

下面是一個例子: 表A列:

[ SVC_PREFIX | SVC_CD | anotherData ] 
[ 111 | 123 | AAA ] 

表B列:

[ SVC_PREFIX | SVC_CD | SVC_ID ] 
[ 111 | 123 | 007] 

表C列:

[ SVC_ID | isGood | isHappy ] 
[ 007 | Y | Y ] 

表d列:

[ SVC_ID | isGood ] 
[ 007 | Y ] 

數據我想檢索:

[ SVC_PREFIX | SVC_CD | anotherData | SVC_ID | isGood | isHappy ] 

實際數據

[ 111 | 123 | AAA | 007 | Y | Y ] 
[ 111 | 123 | AAA | 007 | Y | NULL ] 

我想要顯示C和D的表作爲單獨的行。

目前,我有一個隱含的加入,但並沒有達到我的願望,結果...

SELECT * 
FROM A,B,C,D 
WHERE A.SVC_PREFIX = B.SVC_PREFIX 
AND A.SVC_CD = B.SVC_CD 
AND B.SVC_ID = C.SVC_ID 
AND B.SVC_ID = D.SVC_ID 
AND C.SVC_ID = D.SVC_ID 

感謝您的幫助!

+0

注意:數據庫有密鑰。和強大的類型。看起來你可以加入A和B,並且加入B&C和B&D(或C&D)。 – wildplasser

+0

這個記錄來自'[111 | 123 | AAA | 007 | Y | NULL]'?我的意思是爲什麼有'null'? –

+0

@JohnWoo從技術上說,這個記錄不存在。然而,null表示它來自表D,它與C的數據基本上是相同的數據,除了它沒有,在這個例子中,這是很好的 – bigbitecode

回答

1

您可以使用UNION。我相信這可以在SQL Server中工作。

SELECT A.SVC_PREFIX, B.SVC_CD, A.anotherData, CD.SVC_ID, CD.isGood, CD.isHappy 
FROM A 
JOIN B ON B.SVC_PREFIX = A.SVC_PREFIX AND B.SVC_CD = A.SVC_CD 
JOIN 
(
    SELECT SVC_ID, isGood, isHappy 
    FROM C 

    UNION 

    SELECT SVC_ID, isGood, NULL AS isHappy 
    FROM D 
) AS CD ON CD.SVC_ID = B.SVC_ID 
+0

太棒了。我認爲那樣做了。最有幫助的是JOIN(*另一個查詢在這裏*)和NULL AS命令,默認列爲NULL。 – bigbitecode

0

嘗試用JOIN(內部聯接):

SELECT * 
FROM A 
JOIN B ON B.SVC_PREFIX = A.SVC_PREFIX 
JOIN C ON C.SVC_ID = B.SVC_CD 
JOIN D ON D.SVC_ID = C.SVC_CD 
+0

我試過這個查詢,但它似乎並沒有拉空值。 – bigbitecode