0

JOINS について簡単な質問があります。

table2 で使用されている table1 の項目の数を知りたい場合は、INNER JOIN または LEFT JOIN を使用します (以下を参照)。

INNER JOIN は、「ID」が両方のテーブルのどこにあるかを示すので、table1 の ID が table2 で使用されている場合を表す必要がありますが、ID が table1 ID (LEFT JOIN) と同じであるすべての table2 をリストすると、同じ結果が返されますか?

しかし、結果は異なります。

INNER JOIN は 252,222 を返します LEFT JOIN は 258,637 を返します

PS: table2 は table1 の子であるため、table2 ID は table1 (table1 は製品のリスト、table2 は選択された製品のリスト) からのみ取得できます。

SELECT DISTINCT 
t1.name, t1.details
FROM 
table1 AS t1
INNER JOIN 
table2 AS t2 ON t1.id = t2.t1_id


SELECT DISTINCT 
t1.name, t1.details
FROM 
table1 AS t1
LEFT JOIN 
table2 AS t2 ON t1.id = t2.t1_id

どちらが正しいSQLになりますか、私はINNER JOINを推測しています。

4

3 に答える 3

2

INNER JOIN は、「ID」が両方のテーブルのどこにあるかを示すので、table1 の ID が table2 で使用されている場合を表す必要がありますが、ID が table1 ID (LEFT JOIN) と同じであるすべての table2 をリストすると、同じ結果が返されますか?

この場合、INNER JOIN は table1 と table2 の両方に共通のレコードを与えるため、完全に理にかなっています。

table2 は table1 の子であるため、table2 ID は table1 からのみ取得できます (table1 は製品のリスト、table2 は選択された製品のリスト)。

FOREIGN KEYこれには、ID が TABLE1 に存在した後にのみ存在できるという制約を TABLE2に適用する必要があります。これを行うと、それは理にかなっています。

于 2012-10-19T14:36:05.923 に答える
0

左結合の場合、結果が結合されない場合、結果は table1 と table2 の null から返されます。内部結合の場合、条件を満たす結果のみが返されます。

于 2012-10-19T14:49:33.280 に答える