2

我正在尝试 INNER 加入 3 个表。1st JOIN(单独)完美运行并返回预期的 3 行。然后我添加另一个连接来匹配第三个表中的名称列。我希望再次只有 3 行,但没有。我得到了很多行。

我的问题是,JOIN 是相互建立的吗?1st INNER JOIN 给我们 results_1 ... results_1 上的 2nd INNER JOIN 给 results_2 ... results_2 上的 3rd 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 ... 和 WHERE x.id = z.id AND WHERE AND WHERE ..... 而不是显式连接,因为它更容易排除故障

4

1 回答 1

1

INNER JOIN返回与三个表中的匹配项一样多的行。在您的情况下,它似乎与students.object_table_obj_num_pos_ref 具有一对多的关系books.obj_num_position,因此返回每个books.obj_num_position匹配的任何students.object_table_obj_num_pos_ref具有前一个students.id返回的一个JOINclasses

如果您需要限制其中的一个子集,这样做的方法仍然是通过一个WHERE子句,您可以在其中指定限制条件。

顺便说一句,如果您使用除了子句中的连接条件之外没有其他条件的隐式连接WHERE,您将得到完全相同的结果。

于 2012-10-02T12:41:42.130 回答