我怎样才能加入 4 table?

How can I join 4 table?

我有 4 个表,其中三个是多对多关系:

student 和 Group 之间的关系是一对多

我要的是如何select姓名、课名、标记、组号

select S.Name, L.LessonName, L.Mark, G.GroupNumber from Student s
join StudentLesson SL on SL.StudId = S.StudId
join Lesson L on SL.LessID = L.LessID
Join Group G on G.GroupId = S.GroupId

我认为这一行中的错误 Join Group G on G.GroupId=S.GroupId,因为当我省略它时,它在多对多之间有效,但在一对多之间无效。

group是保留字,需要加引号。在 MySQL 中,您可以使用反引号:

select S.Name, L.LessonName, L.Mark, G.GroupNumber 
from Student       S
join StudentLesson SL on SL.StudId = S.StudId
join  Lesson       L  on SL.LessID = L.LessID
Join  `Group`      G  on G.GroupId = S.GroupId

根据评论:查询没问题;您缺少与您想要的结果相匹配的数据。

  1. 没有学生有groupID
  2. 组中没有groupID与GROUPID匹配的学生table。

为了证明这一点,您可以简单地将最后一个连接设为 LEFT 连接,前提是您没有对 Group 进行限制的 where 子句。

发件人:

select S.Name,L.LessonName,L.Mark,G.GroupNumber from Student s
join StudentLesson SL on SL.StudId=S.StudId
join  Lesson L on SL.LessID =L.LessID
Join Group G on G.GroupId=S.GroupId

收件人:

SELECT S.Name, L.LessonName, L.Mark, G.GroupNumber 
FROM Student s
INNER JOIN StudentLesson SL on SL.StudId=S.StudId
INNER JOIN Lesson L on SL.LessID =L.LessID
LEFT JOIN Group G on G.GroupId=S.GroupId

如果组 ID 匹配,这将向您显示所有带课程的学生和组编号;但我敢打赌它们都将为 NULL。

你也是所有学生,无论他们是否有课程或小组,如果是这样,你的 inner 加入应该是 left。如果您只是在上课并属于团体的学生之后,那么他们都需要成为内部联接。就看你追求什么了!

左联接会说包括先前数据联接中的所有记录,并且仅包含与此联接匹配的记录(示例中的分组)