mysql - INNER JOIN 使用 AND?

标签 mysql sql join

我正在尝试内部连接 ​​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/

相关文章:

mysql - 使用临时表不起作用 - MYSQL

MySQL 使用 AVG 和 STD 条件选择排除异常值的结果

java - 我们如何计算 mongodb java 中不同文档的 arraylist 中的项目数?

SQL查询得到预期结果

sql - 连接表时出现问题,需要在分组之前对连接表进行排序

php - 当从 php 填充的下拉列表中选择时,使用所需的数据并根据选择的数据使用更多 php 填充 html 表

mysql - mysql如何将一张表的数据导入到另一张表

sql - PIVOT Oracle - 将多行数据转换为具有多列的单行,无聚合数据

SQL返回一个字段包含相同数据但其他字段包含不同数据的行

sql - 左连接嵌套选择和聚合函数