MySQL复杂的三个表连接

时间:2016-05-17 20:40:15

标签: mysql sql join

我有三个表,一个用户表,一个课程表和一个隐藏课程表。

隐藏课程表包含user_id列和course_id列。

让我们说我想查看课程所有用户的所有隐藏课程表信息' course1'。当我获取数据时,我希望它包括:

  • hidden_​​courses.id
  • courses.id
  • courses.title
  • user.id
  • user.name

我一直在尝试执行此查询,但它并不总能正确填充我的列。我希望课程信息始终来自' 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执行查询并从users表中选择吗?我也没有成功。

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

enter image description here

1 个答案:

答案 0 :(得分:1)

我通常认为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,然后就可以达到效果。

您是否只想过滤主要courses c部分用户?如果是这样,请将1=1替换为将users与其对应的courses相关联的内容。

我不知道RIGHT JOIN是否可以这样做,因为我从不使用它们。

相关问题