我怎样才能加入 4 table?
How can I join 4 table?
我有 4 个表,其中三个是多对多关系:
- 学生(StudID,GroupId,Name,....)
- 课程(LessID,LessonName,Mark)
- StudentLesson(StudID,LessID)
student 和 Group 之间的关系是一对多
- 学生(学号,姓名,....)
- 组(GroupId,GroupNumber)
我要的是如何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
根据评论:查询没问题;您缺少与您想要的结果相匹配的数据。
- 没有学生有groupID
- 组中没有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
。如果您只是在上课并属于团体的学生之后,那么他们都需要成为内部联接。就看你追求什么了!
左联接会说包括先前数据联接中的所有记录,并且仅包含与此联接匹配的记录(示例中的分组)
我有 4 个表,其中三个是多对多关系:
- 学生(StudID,GroupId,Name,....)
- 课程(LessID,LessonName,Mark)
- StudentLesson(StudID,LessID)
student 和 Group 之间的关系是一对多
- 学生(学号,姓名,....)
- 组(GroupId,GroupNumber)
我要的是如何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
根据评论:查询没问题;您缺少与您想要的结果相匹配的数据。
- 没有学生有groupID
- 组中没有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
。如果您只是在上课并属于团体的学生之后,那么他们都需要成为内部联接。就看你追求什么了!
左联接会说包括先前数据联接中的所有记录,并且仅包含与此联接匹配的记录(示例中的分组)