MySQL 三个表的复杂连接

标签 mysql sql join

我有三个表:用户表、类(class)表和隐藏类(class)表。

隐藏类(class)表包含 user_id 列和 course_id 列。

假设我想查看类(class)“course1”的所有用户的所有隐藏类(class)表信息。当我获取数据时,我希望它包括:

  • hidden_​​courses.id
  • 类(class)ID
  • 类(class).标题
  • 用户ID
  • 用户名

我一直在尝试一些方法来执行此查询,但它并不总是正确填充我的列。我希望类(class)信息始终来自“course1”和所有用户的列表。唯一可能不存在的是 hidden_​​courses.id

这是我正在尝试的:

SELECT hc.id, u.id, u.name, c.id, c.title
FROM hidden_courses AS hc
RIGHT JOIN users AS u ON u.id = hc.user_id
RIGHT JOIN courses AS c ON c.id = hc.course_id

我应该使用 LEFT JOINS 执行查询并从用户表中选择吗?我也没有成功。

类(class)和用户表之间没有关系。假设我有 3 个用户,以及 user1 和 course1 的一个隐藏类(class)记录。我希望输出是:

enter image description here

最佳答案

我通常发现LEFT JOIN更容易理解。

SELECT hc.id, u.id, u.name, c.id, c.title
FROM courses as c -- must exist
LEFT JOIN users as u on 1=1 -- all users, optional
LEFT JOIN hidden_courses as hc on hc.user_id=u.id and hc.course_id=c.id -- optional

假设没有用户,那么你想要没有结果吗?如果是这样,则将 LEFT JOIN users 替换为 JOIN users,然后即可获得该效果。

您想仅过滤主类(class)c的用户部分吗?如果是这样,请将 1=1 替换为将用户与其相应的类(class)联系起来的内容。

我不知道RIGHT JOIN是否可以实现这一点,因为我从未使用过它们。

关于MySQL 三个表的复杂连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37285866/

相关文章:

mysql - 当其他表可以使用联接连接时,在单个表中拥有多个外键是好还是坏?

python - 在 join() 期间是否对列表中的对象调用了任何魔术方法?

mysql - 'IN/ALL/ANY' 子查询中的未知列

php - 在 php/mysql 中跟踪时间冲突的正确算法是什么?

php - 如何多次加入同一个表以检索不同的结果

sql - 获取列总和并用于计算总数的百分比,为什么不适用于 CTE

javascript - 使用 Sequelize 多次连接到同一个表

sql - 有没有办法在左连接中实现计数

mysql - 如何让这个 MySql WordPress 查询运行得更快?

Android - 配置 SQLite 表以满足我的需求