0

私はたくさんのテーブルを持っています:

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

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

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

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

...

Table1 は特別で、実際にはすべての個人 (名前と個人情報) が含まれていますが、他のすべてのテーブルにはほぼ確実に行がありません (個人がそのイベントに参加していないだけです)。

私がやりたいことは、すべてのテーブルを (共通の 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

これが行うことは、メモリの過負荷を与えることだけです。どういうわけか、すべてのテーブルのデカルト積を取っていると思います。それがすべてを詰まらせています。これを行う良い方法はありますか?

前もって感謝します!

4

2 に答える 2

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フォームを参照してください。

于 2013-03-12T21:46:52.617 に答える
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

はい、すべてのテーブルのデカルト積を取り、それを他のテーブルに結合したままにしました

于 2013-03-12T21:48:14.947 に答える