1

複数の結合のロジックを知りたいです (例: 以下)。

SELECT * FROM B100行を返します

SELECT B.* FROM B LEFT JOIN C ON B.ID = C.ID120行を返します

私が知っているように、左結合を使用すると、両方のテーブルにデータが見つかった場合、左のテーブルから一致するデータが返されます。これは B です。しかし、なぜ を使用するleft joinと、テーブル B 自体よりも多くのデータが返されるのでしょうか?

ここで何が間違っているか、誤解されていますか? どんなガイダンスでも大歓迎です。前もって感謝します。

4

3 に答える 3

1

次の例を見てください。

B = {1,2}
C = {(1,a),(1,b),(1,c),(1,d),(1,e)}

の結果は次のB left join Cようになります。

1 | a
1 | b
1 | c
1 | d
1 | e
2 | null

結果の行数は、B (2) の行よりも明らかに多くなっています。

一般に、結果の行数は、あなたが考えるだけでなく、によってB left join C制限されます...B.size + C.sizeB.size

于 2013-04-08T06:24:17.990 に答える
1

テーブルBとする:

id
----
1
2
3

テーブルCとする

id     name
------------
1      John
2      Mary
2      Anne
3      Stef

b の ID は c の ID と一致し、id=2 は 2 回一致します。したがって、id の左結合は、ベース テーブル B に 3 行ある場合でも 4 行を返します。

次に、より邪悪な例を見てください。

表 B

id
----
1
2
2
3
4

表C

id     name
------------
1      John
2      Mary
2      Anne
3      Stef

b のすべての id が c の id と一致し、最初の id=2 が 2 回一致し、2 番目の id=2 が 2 回一致するため、次の結果が得られます。

select b.id, c.name
from b left join c on (b.id = c.id)

になります

id     name
------------
1      John
2      Mary
2      Mary
2      Anne
2      Anne
3      Stef
4      (null)

id=4 は一致しませんが、左結合であるため結果に表示されます。

于 2013-04-08T06:24:56.630 に答える
0

クエリに従って、CでBテーブルに結合し、Bテーブルは左テーブルであるため、左テーブルのすべてのレコードが表示されます。

于 2013-04-08T06:28:13.503 に答える