2013-03-12 108 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