2012-12-17 61 views
0

我正在做一個系統,我在查詢中連接多個表。 在大多數情況下,以下類型的查詢做的伎倆:構建一個查詢,該查詢既可以使用也可以不使用特定的表

 SELECT * FROM A JOIN B ON A.a = B.a JOIN C ON C.a = A.a WHERE A.a = 123; 

屬性A.A是PK和B.a和正達作爲FK

在某些情況下,沒有相應的B.a和C.a.在其他人中,只有C.a缺失。 現在,如果在B或C中沒有相應的鍵,我會得到一個空集。如預期。

這將是方便的與產生一組與僅對於A的屬性,如果單獨存在,並增加了B和C的屬性的查詢,如果AA =鋇等

我想這需要DBMS特定溶液和不一般的SQL,但我不確定。

任何想法如果可能的話應該怎麼做?

+0

你想要一個[outer join](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)。 – eggyal

+0

這正是我想要的!謝謝。 –

回答

1

你想這樣的:

SELECT * 
FROM A LEFT OUTER JOIN 
    B 
    ON A.a = B.a LEFT OUTER JOIN 
    C 
    ON C.a = A.a 
WHERE A.a = 123 

left outer join保持所有在第一個表中的記錄(一個對「左」),並在右側任何匹配表。您可以引用任何表中的列。如果沒有匹配,則值爲NULL。

+0

是的!這正是我想要的。我完全錯過了外連接的概念。現在我覺得有些似乎有點沒有研究的東西很愚蠢。 –

1

這種加入稱爲outer(與默認種類的加入相對,稱爲內部)。

這裏是你如何告訴你需要一個外部SQL聯接:

SELECT * FROM A 
LEFT OUTER JOIN B ON A.a = B.a 
LEFT OUTER JOIN C ON C.a = A.a WHERE A.a = 123; 

這告訴SQL,即使當BC(或兩者)都缺少相應的行,你還想要什麼行時,可用。

相關問題