2

3 つのテーブルを内部結合しようとしています。最初の JOIN (単独) は完璧に機能し、予想される 3 行を返します。次に、別の結合を追加して、3 番目のテーブルの名前列に一致するようにします。私は再び3行だけを期待しますが、いいえ。大量の行が返されます。

私の質問は、JOIN は相互に構築されますか? 1 番目の INNER JOIN は results_1 を返します ... results_1 の 2 番目の INNER JOIN は results_2 を返します ... results_2 の 3 番目の INNER JOIN など?? これは本当ですか?

select
students.*
FROM classes
INNER JOIN students ON students.id = classes.id
INNER JOIN books ON books.obj_num_position = students.object_table_obj_num_pos_ref

FROM XYZ ... and WHERE x.id = z.id AND WHERE AND WHERE ..... を使用することに戻っていることに気付きました。明示的な結合の代わりに、トラブルシューティングが簡単だからです。

4

1 に答える 1

1

INNER JOIN、3 つのテーブル全体で一致する行と同じ数の行を返します。あなたの場合、 と1対多の関係students.object_table_obj_num_pos_ref があるように見えるため、前のwith で返されたいずれかを持つすべての一致するものを返します。books.obj_num_positionbooks.obj_num_positionstudents.object_table_obj_num_pos_refstudents.idJOINclasses

これらのサブセットに制限する必要がWHEREある場合、制限条件を指定する句を使用して制限する方法があります。

ちなみに、WHERE句内の結合条件以外の条件なしで暗黙の結合を使用した場合、まったく同じ結果が得られます。

于 2012-10-02T12:41:42.130 に答える