2012-02-03 4 views
1

2つのテーブルを結合しようとしています。表Aは、field_a_1,field_a_2,field_a_3の100個の固有のレコードを含む。 field_a_1field_a_2の組み合わせはユニークです。MS SQL 2008 R2に参加しました

表Bには、複数のフィールドを持つ数百万のレコードがあります。 field_b_1field_a_1と同じで、field_b_2field_a_2と同じです。

は、私はこのような2つのテーブルを結合:

select a.*, b.* 
from a 
left join b 
on field_a_1 = field_b_1 
and field_a_2 = field_b_2 

代わりに100個のレコードを取得するのは、私は数百万レコードを取得します。どうしてこれなの?

+2

私はテーブルを内部結合することを意味すると思います。 – Malk

答えて

3

左結合は、最初のテーブルのすべての行+一致するすべての行を2番目のテーブルから戻すためです。どのような数の一致する行のうち、どれを取得すると予想しましたか?

4

テーブルBには、テーブルAのエントリごとに複数の行があるためです。例えば

: - すなわち

TableA (ID) 
1 
2 
3  

TableB (ID, data) 
1 hello 
1 world 
1 foo 
1 bar 
2 data 
2 words 
2 more 
3 words 
3 boring 

あなたTableAのからテーブルBにleft join場合は、TableAのレコードに一致するすべてのテーブルBのレコードの行を取得します。それらのすべて。

あなたはあなたが探している結果を説明できますか?

0

左結合または内結合は実際には違いはありません。 JOINは、結合条件に一致するすべての行を戻します。したがって、テーブルbにJOIN条件に一致する数百万の行がある場合、すべての行が戻されます。

目的に応じて、DISTINCTキーワードまたはGROUP BYを使用して集約関数を実行することを検討する必要があります。

関連する問題