我正在尝试内部连接 3 个表。 1st JOIN(单独)工作完美并返回预期的 3 行。然后我添加另一个连接来匹配第三个表中的名称列。我希望再次只有 3 行,但没有。我得到了很多行。
我的问题是,JOIN 是否相互构建?第一个 INNER JOIN 给我们 results_1 ... results_1 上的第二个 INNER JOIN 给我们 results_2 ... results_2 上的第三个 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 X Y Z ... 和 WHERE x.id = z.id AND WHERE AND WHERE ..... 而不是显式连接,因为它更容易排除故障
最佳答案
INNER JOIN
将返回与三个表中的匹配项一样多的行。在您的情况下,students.object_table_obj_num_pos_ref
似乎与 books.obj_num_position
具有一对多关系,因此返回每个 books.obj_num_position
匹配任何 students.object_table_obj_num_pos_ref
具有在先前的 JOIN
中返回的 students.id
之一与 类
。
如果您需要限制其中的一个子集,方法仍然是通过 WHERE
子句,您可以在其中指定限制条件。
顺便说一下,如果您使用的隐式连接除了 WHERE
子句中的连接条件外没有其他条件,您将得到完全相同的结果。
关于mysql - INNER JOIN 使用 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12690394/