Mysql SQL查询:由一个联接表链接到另一个联接表的行
我正在使用MySQL。在我的数据库中,我有以下表格:Mysql SQL查询:由一个联接表链接到另一个联接表的行,mysql,sql,Mysql,Sql,我正在使用MySQL。在我的数据库中,我有以下表格: 学生表格。此表的主键是sid A高中表格。主键是hid A大学表格。主键是uid 然后: 有一个联合表用于学生和高中,该表名为联合表它有两列:sid和hid,分别链接到学生和高中中的行 还有另一个联合表格用于学生和大学,名为联合表格,它还有两列:sid和uid,分别链接到学生和大学中的行 我的问题和疑问: 我想让那些学生通过sid链接到joint_table_A中的hid=3也链接到joint_table_B的sid,并将uid的值设置为
sid
高中
表格。主键是hid
大学
表格。主键是uid
- 有一个联合表用于
和学生
,该表名为高中
它有两列:联合表
和sid
,分别链接到hid
和学生
中的行高中
- 还有另一个联合表格用于
和学生
,名为大学
,它还有两列:联合表格
和sid
,分别链接到uid
和学生
中的行大学
学生通过sid
链接到joint_table_A
中的hid=3
也链接到joint_table_B
的sid
,并将uid
的值设置为1
。此操作的SQL查询是什么
====更新========
目前我在下面得到了3个答案,一个使用连接
,一个使用左连接
,最后一个使用内部连接
。我被那些连接弄糊涂了(我还在学习SQL)。如果您能添加一些解释,这将更有助于我理解您的答案,以便我了解您的答案之间的差异。谢谢 这应该有效:
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
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
要尝试解释此查询的左连接
和内部连接
之间的差异,请执行以下操作:
假设你在学生
中有1000条记录,但在联合表格A
中只有50条记录,给出了50所高中学生的hid,在联合表格B
中还有50条记录
当您LEFT JOIN
时,左表中的所有行(students
)都将保留,即使它们无法与右表中的记录合并。当您内部联接时
只保留可以联接的行-左侧和右侧表中都存在sid
使用左连接
1000student
join to 50joint_table_A
records-在join之后950条记录具有hid=NULL
来自上一次联接的1000条记录被联接到joint\u table\u B
-950条记录具有uid=NULL
现在检查所有1000条记录的,其中a.hid=3和b.uid=1
使用内部联接
1000student
join to 50joint_table_A
records-在join之后只剩下50条可以加入的记录
前一次加入的50条记录被加入到联合表格\u B
-20条记录可以加入(并非所有高中记录的学生也有大学记录)
现在检查20条记录的,其中a.hid=3和b.uid=1
您可以看到为什么在这种情况下使用内部连接
。@Mellon:连接
只是内部连接
的简写。与左连接的区别最好用以下公式来解释:在这种情况下,内部连接是您想要的-(连接显然是相同的,但我始终明确声明我使用的连接类型)。在左联接中,您将保留结果集中students表中的所有记录,即使这些记录与其中一个联接表中的任何记录都不匹配,因为我们是基于联接表中的字段进行筛选的,所以筛选该联接表中没有任何值的结果是没有意义的,因此,如果这有意义的话,你也可以在加入的过程中把它们去掉。所有3个答案都会给出相同的结果集。之前的评论+1。在您的案例中应该是JOIN或internal JOIN not LEFT JOIN。@Mellon请参阅eggyal注释您应该使用JOIN或internal JOIN not LEFT JOIN,如我上面的回答所示。我的错误。
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