2013-03-12 137 views
0

我有表的一大堆:多個左連接到單個表

Table1: PersonID, A1, A2, A3, ... 

Table2: PersonID, B1, B2, B3, ... 

Table3: PersonID, C1, C2, C3, ... 

Table4: PersonID, D1, D2, D3, ... 

... 

表1是特殊的,因爲它實際上包含所有個人(姓名和個人信息),但所有其他表幾乎肯定缺少行(一個人根本沒有參加那個活動)。

我想要做的是將所有表連接在一起(通過普通的PersonID),以便任何缺失的屬性都會留空。所以,當然,我想用外連接。這是我試過的:

SELECT * 

FROM Table1, Table2, Table3, Table4, Table5, Table6 

LEFT OUTER JOIN Table2 ON Table1.PersonID = Table2.PersonID 
LEFT OUTER JOIN Table3 ON Table1.PersonID = Table3.PersonID 
LEFT OUTER JOIN Table4 ON Table1.PersonID = Table4.PersonID 
LEFT OUTER JOIN Table5 ON Table1.PersonID = Table5.PersonID 
LEFT OUTER JOIN Table6 ON Table1.PersonID = Table6.PersonID 

所有這一切都給我一個記憶超載。我想我不知道如何把所有桌子上的笛卡爾積放在一起,這一切都在窒息。有沒有一個好的方法來做到這一點?

在此先感謝!

回答

1

更改此:

SELECT * 

FROM Table1, Table2, Table3, Table4, Table5, Table6 

LEFT OUTER JOIN Table2 ON Table1.PersonID = Table2.PersonID 
LEFT OUTER JOIN Table3 ON Table1.PersonID = Table3.PersonID 
LEFT OUTER JOIN Table4 ON Table1.PersonID = Table4.PersonID 
LEFT OUTER JOIN Table5 ON Table1.PersonID = Table5.PersonID 
LEFT OUTER JOIN Table6 ON Table1.PersonID = Table6.PersonID 

這樣:

SELECT * 

FROM Table1 
LEFT OUTER JOIN Table2 ON Table1.PersonID = Table2.PersonID 
LEFT OUTER JOIN Table3 ON Table1.PersonID = Table3.PersonID 
LEFT OUTER JOIN Table4 ON Table1.PersonID = Table4.PersonID 
LEFT OUTER JOIN Table5 ON Table1.PersonID = Table5.PersonID 
LEFT OUTER JOIN Table6 ON Table1.PersonID = Table6.PersonID 

是,喲服用的所有表的笛卡爾乘積,然後離開它連接到其他

+0

這麼簡單的事情....感謝你的快速反應!那麼,它現在幾乎完美工作,問題是我沒有得到相同數量的行在表格1中有大約1000行,所以,因爲所有的東西都被連接到它上面,所以結果也應該有1000行,但是我只能得到大約900行,很可能有〜100那些沒有參加任何活動的人,但是我會認爲每個領域都只是一個NULL。是不是這樣? – mstobb 2013-03-12 22:04:45

+0

你能提供一個被省略的行的例子 – 2013-03-12 22:13:24

+0

我認爲這個新問題是軟件相關的。自由基在很多方面都不是很完美,當我用新的查詢直接計算行數時,我得到了正確的數字,非常奇怪,感謝您的幫助! – mstobb 2013-03-12 23:45:52

2

使用此:

SELECT * 
FROM Table1 
LEFT OUTER JOIN Table2 ON Table1.PersonID = Table2.PersonID 
LEFT OUTER JOIN Table3 ON Table1.PersonID = Table3.PersonID 
LEFT OUTER JOIN Table4 ON Table1.PersonID = Table4.PersonID 
LEFT OUTER JOIN Table5 ON Table1.PersonID = Table5.PersonID 
LEFT OUTER JOIN Table6 ON Table1.PersonID = Table6.PersonID 

看那SQL Joins形式的更多信息。

+0

+1:你把電線夾住了我。 ;-( – 2013-03-12 21:49:13

+0

)你們很瘋狂,謝謝你的幫助! – mstobb 2013-03-12 22:05:22