我正在尝试INNER加入3个表。 1st JOIN(单独)工作正常并返回预期的3行。然后我添加另一个连接来表示匹配第三个表中的名称列。我会期待再次只有3行但是没有。我收到了很多行。
我的问题是,JOIN是否相互建立? 1st INNER JOIN为我们提供了results_1 ...在results_1上的第二次INNER JOIN给出了result_2 ...第三次INNER JOIN在results_2上等等?这是真的吗?
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 X Y Z ...和WHERE x.id = z.id AND WHERE AND WHERE .....而不是显式连接,因为它更容易排除故障
答案 0 :(得分: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
中使用JOIN
返回classes
之一。
如果您需要限制其中的一部分,那么仍然可以通过WHERE
子句来指定限制条件。
顺便说一下,如果你使用的隐式连接除了WHERE
子句中的连接条件之外没有任何条件,你将获得完全相同的结果。