我有一个关于我想要执行的 SQL 的问题,但不知道如何编写它。以下是具有如此虚拟数据的表格:
模块:
ModuleId (PK auto) ModuleNo ModuleName
1 CHI2523 Business
课程:
CourseId (PK auto) CourseName
1 Business and Computing
2 ICT
3 Sports
课程_模块:
CourseId (PK) ModuleId (PK)
1 1
2 1
会议:
SessionId (PK auto) SessionName ModuleId (FK)
3 DFRER 1
学生:
StudentId (PK auto) StudentAlias StudentForename StudentSurname CourseId (FK)
1 u03824 Bill Murphy 1
2 u38492 Conrad Jones 2
3 u48383 Jane Peters 1
4 u34322 Morgan Gray 2
5 u39292 Bilal Tuddy 3
学生会话:
SessionId (PK) StudentId (PK)
3 1
3 2
我希望查询能够找到的是所有剩余的当前未参加所选评估但可以清楚地参加评估的学生。
因此,为了能够做到这一点,我们必须:
SessionId
通过在Session
表中查找来查看所选会话是什么通过查看表中
SessionId
的来查看属于哪个模块。ModuleId
Session
ModuleId
通过Course_Module
查表查看哪些课程通过查看与表中的's
CourseId
匹配的学生表来查找每个学生的课程CourseId
Course_Module
显示属于该模块所在课程的所有学生,但只显示当前不在会话中的学生(或者换句话说,不在
Session
表格中选择所选SessionId
.
所以如果SessionId
选择的是 3,那么它应该输出的学生是:
StudentId (PK auto) StudentAlias StudentForename StudentSurname CourseId (FK)
3 u48383 Jane Peters 1
4 u34322 Morgan Gray 2
这是因为:
SessionId
3属于ModuleId
1ModuleId
属于CourseId
1 和 2查找
CourseId
1 和 2 有 4 名学生参加了该课程SessionId
但是其中 2 名学生在查看 Table 时已经参加了3Student_Session
次,因此只显示其他 2 名学生,因为他们目前没有参加课程
我的问题是如何编写查询以实现上述示例?我已经开始查询,但需要有人帮助来增强它,以便它符合上面示例的要求:
SELECT s.StudentId, StudentAlias, StudentForename, StudentSurname
FROM Session s
INNER JOIN Module m ON m.ModuleId = s.ModuleId
INNER JOIN Course_Module cm ON cm.ModuleId = m.ModuleId
INNER JOIN Student s ON cm.CourseId = s.CourseId
INNER JOIN Student_Session ss ON s.StudentId = ss.StudentId
WHERE s.SessionId = 3
ORDER BY StudentAlias;
我不知道如何检查哪些学生是/不清晰,然后只选择那些可以参加评估但目前没有参加评估的学生