SQL查询:由一个联合表链接链接到另一个联合表的行

时间:2013-12-01 22:14:27

标签: mysql sql

我正在使用MySQL。在我的数据库中,我有以下表格:

  1. student表。此表的主键是sid

  2. high_school表。主键是hid

  3. university表。主键是uid

  4. 然后:

    • student&有一个联合表high_school,该表名为joint_table_A,它有两列:sidhid,它们链接到student&中的行。分别为high_school

    • student&的另一个联合表 university joint_table_B,名为sid,它还有两列:uidstudent,它们链接到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)。如果你能添加一些解释,这对我理解你的答案会更有帮助,这样我才能知道你的答案之间的差异。谢谢!

3 个答案:

答案 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 JOININNER JOIN之间的区别:

想象一下,students中有1000条记录,但joint_table_A中只有50条记录,其中包含50名学生的高中学历,以及joint_table_B中的50名学生。

当您LEFT JOIN时,左表(students)中的所有行都会保留,即使它们无法连接到右表中的记录也是如此。当您INNER JOIN时,只保留可以加入的行 - 左表和右表中都存在sid

使用LEFT JOIN

  1. 1000 student加入50 joint_table_A条记录 - 加入950条记录后hid = NULL
  2. 上一次加入的1000条记录已加入joint_table_B - 其中950条记录已uid = NULL
  3. 现在检查所有1000条记录WHERE a.hid = 3 AND b.uid = 1
  4. 使用INNER JOIN

    1. 1000 student加入50条joint_table_A条记录 - 加入后,只有50条可加入的记录保留。
    2. 上一次加入的50条记录加入joint_table_B - 其中20条记录可以加入(并非所有记录过高中的学生都记录过大学)。
    3. 现在检查了20条记录WHERE a.hid = 3 AND b.uid = 1
    4. 您可以看到为什么INNER JOIN是在这种情况下使用的。