mysql - SQL 查询 : rows linked by one joint table link to another joint table

标签 mysql sql

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

  1. A student table 。该表的主键是sid .

  2. A high_school table 。主键是 hid .

  3. A university table 。主键是 uid .

然后:

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

  • student 还有另一个联合表 & university ,名为joint_table_B ,它还有两列:siduid链接到 student 中的行& university分别。

我的问题和疑问:

我想要那些students链接为 sidjoint_table_A哪里hid = 3也链接到joint_table_Bsid并输入 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 JOININNER JOIN 之间的区别:

想象一下,students 中有 1000 条记录,但 joint_table_A 中只有 50 条记录,其中 hid 包含 50 名高中生,另外 50 条记录在 joint_table_B.

当您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

使用 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

您可以明白为什么在这种情况下使用 INNER JOIN 了。

关于mysql - SQL 查询 : rows linked by one joint table link to another joint table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20317905/

相关文章:

php - sql select 'in' 语句中的多个参数

php - 按获取按钮后应用程序崩溃。 Android 的远程数据库

php - 删除双向友谊的查询(mysql)

sql - 插入带分号的字符串值会导致错误

sql - 如何打开使用终端下载的 sql 数据库?

mysql - 删除时外键约束一对多表,更新级联规则

mysql - 通常来说,公司 "A"使用 MySQL 作为数据库。它是指 MySQL 免费版还是 MySQL 企业版?

javascript - 通过 Express、Axios 在 MySQL PUT 和 DELETE 上出现错误 500

sql - 为什么不喜欢 SQL?

SQLite 事务和 LastInsertRowID