【发布时间】:2012-12-24 07:14:43
【问题描述】:
我有一个关于我想要执行的 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
Student_Session:
SessionId (PK) StudentId (PK)
3 1
3 2
我希望查询能够找到当前未参加所选评估但可以清楚地参加评估的所有剩余学生。
因此,为了能够做到这一点,我们必须:
通过在
Session表中查找SessionId来查看所选会话是什么通过查看
Session表中的ModuleId来查看SessionId属于哪个模块。通过查看
Course_Module表查看ModuleId所在的课程通过查看学生表中与
Course_Module表中的CourseId匹配的CourseId来查找每个学生的课程显示属于该模块所在课程的所有学生,但仅显示当前不在会话中的学生(或者换句话说,不在
Session表中选择SessionId。
所以如果SessionId选择的是3,那么它应该输出的学生是:
StudentId (PK auto) StudentAlias StudentForename StudentSurname CourseId (FK)
3 u48383 Jane Peters 1
4 u34322 Morgan Gray 2
这是因为:
SessionId3 属于ModuleId1ModuleId属于CourseId1和2查找
CourseId1 和 2 有 4 名学生参加了该课程但是其中 2 名学生在查看
Student_Session表时已经在参加SessionId3,因此仅显示其他 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;
我不知道如何检查哪些学生清晰/不清晰,然后只选择那些可以参加评估但目前没有参加评估的学生
【问题讨论】:
-
您的问题已得到很好的解释。
:D