我正在使用MySQL。在我的数据库中,我有以下表格:
A
student
table 。该表的主键是sid
.A
high_school
table 。主键是hid
.A
university
table 。主键是uid
.
然后:
student
有一个联合表 &high_school
,该表名为joint_table_A
它有两列:sid
和hid
链接到student
中的行&high_school
分别。student
还有另一个联合表 &university
,名为joint_table_B
,它还有两列:sid
和uid
链接到student
中的行&university
分别。
我的问题和疑问:
我想要那些students
链接为 sid
在joint_table_A
哪里hid = 3
也链接到joint_table_B
的sid
并输入 uid
的值成为1
。此操作的 SQL 查询是什么?
=====更新======
目前我得到以下 3 个答案,其中一个使用 JOIN
,其中一个使用LEFT JOIN
&最后一个使用 INNER JOIN
。我对这些JOINs
感到困惑(我还在学习SQL)。如果您可以添加一些解释,这将更有利于我理解您的答案,以便我了解您的答案之间的差异。谢谢!
最佳答案
SELECT s.*
FROM students s
INNER JOIN joint_table_A a ON s.sid = a.sid
INNER JOIN joint_table_B b ON s.sid = b.sid
WHERE a.hid = 3
AND b.uid = 1
尝试解释此查询的 LEFT JOIN
和 INNER JOIN
之间的区别:
想象一下,students
中有 1000 条记录,但 joint_table_A
中只有 50 条记录,其中 hid 包含 50 名高中生,另外 50 条记录在 joint_table_B
.
当您LEFT JOIN
时,左表中的所有行(students
)都会保留,即使它们无法连接到右表中的记录。当您INNER JOIN
时,仅保留可以连接的行 - 其中sid
存在于左表和右表中。
使用 LEFT JOIN
- 1000 个
student
联接到 50 个joint_table_A
记录 - 联接后 950 条记录具有hid = NULL
。 - 上一次联接中的 1000 条记录已联接到
joint_table_B
- 其中 950 条具有uid = NULL
。 - 现在将检查所有 1000 条记录的
WHERE a.hid = 3 AND b.uid = 1
使用 INNER JOIN
- 1000 个
student
加入到 50 个joint_table_A
记录 - 加入后,只剩下 50 条可以加入的记录。 - 上一次联接中的 50 条记录将联接到
joint_table_B
- 其中 20 条记录可以联接(并非所有记录了高中的学生也都记录了大学)。 - 现在已检查 20 条记录的
WHERE a.hid = 3 AND b.uid = 1
您可以明白为什么在这种情况下使用 INNER JOIN
了。
关于mysql - SQL 查询 : rows linked by one joint table link to another joint table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20317905/