我有三个表:用户表、类(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)记录。我希望输出是:
最佳答案
我通常发现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/