我正在尝试内连接3个表。第一个连接(单独)完美地工作,并返回预期的3行。然后,我添加了另一个连接,即匹配来自第三个表的name列。我希望再次只有3行,但不是。我得到了一大堆行。
这是真的吗?
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我发现自己又回到了从X,Y,Z开始使用...和WHERE x.id = z.id以及WHERE and WHERE .....而不是显式连接,因为它更容易进行故障排除
发布于 2012-10-02 20:41:42
INNER JOIN将返回与三个表中匹配的行数相同的行数。在您的例子中,students.object_table_obj_num_pos_ref似乎与books.obj_num_position有一对多的关系,因此会返回与任何students.object_table_obj_num_pos_ref匹配的每个students.id,其中任何一个JOIN返回的classes是在前一个classes中返回的。
如果需要限制到其中的一个子集,则仍然可以通过WHERE子句来实现,在该子句中可以指定限制条件。
顺便说一句,如果您在WHERE子句中使用了隐式连接,除了连接条件之外没有其他条件,那么您将得到完全相同的结果。
https://stackoverflow.com/questions/12690394
复制相似问题