我正在使用MySQL。在我的数据库中,我有以下表格:
student
表。此表的主键是sid
。
high_school
表。主键是hid
。
university
表。主键是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}}并放置1
的值为JOIN
。这个操作的SQL查询是什么?
=====更新======
目前我得到3个答案,一个使用LEFT JOIN
,一个使用INNER JOIN
&最后一个使用JOINs
。我对那些{{1}}感到困惑(我还在学习SQL)。如果你能添加一些解释,这对我理解你的答案会更有帮助,这样我才能知道你的答案之间的差异。谢谢!
答案 0 :(得分:0)
SELECT student.*
FROM student
JOIN joint_table_A USING (sid)
JOIN joint_table_B USING (sid)
WHERE joint_table_A.hid = 3
AND joint_table_B.uid = 1
答案 1 :(得分:0)
这应该有效:
SELECT *
FROM student s
LEFT JOIN joint_table_A a ON a.sid=s.sid
LEFT JOIN high_school h ON h.hid=a.sid
LEFT JOIN joint_table_B b ON b.sid=s.sid
LEFT JOIN university u ON u.uid=b.uid
WHERE h.hid = 3 AND u.uid=1
答案 2 :(得分:0)
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条记录,其中包含50名学生的高中学历,以及joint_table_B
中的50名学生。
当您LEFT JOIN
时,左表(students
)中的所有行都会保留,即使它们无法连接到右表中的记录也是如此。当您INNER JOIN
时,只保留可以加入的行 - 左表和右表中都存在sid
。
使用LEFT JOIN
student
加入50 joint_table_A
条记录 - 加入950条记录后hid = NULL
。joint_table_B
- 其中950条记录已uid = NULL
。WHERE a.hid = 3 AND b.uid = 1
使用INNER JOIN
student
加入50条joint_table_A
条记录 - 加入后,只有50条可加入的记录保留。joint_table_B
- 其中20条记录可以加入(并非所有记录过高中的学生都记录过大学)。WHERE a.hid = 3 AND b.uid = 1
您可以看到为什么INNER JOIN
是在这种情况下使用的。