我有一个关于sql的问题,我想执行,但不知道如何编写它。下面是具有SO伪数据的表:
模块:
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
所属的课程通过查看与
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个学生参加了该课程但其中2名学生在查看
SessionId
表格时已经在使用Student_Session
3,因此只显示其他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;
我不知道如何检查哪些学生是/不是易读的,然后只选择那些可以进行评估但目前没有参加评估的学生
最佳答案
SELECT e.*
FROM Session a
INNER JOIN Module b
ON a.ModuleID = b.ModuleID
INNER JOIN Course_Module c
ON b.ModuleID = c.ModuleID
INNER JOIN Course d
ON c.CourseID = d.CourseID
INNER JOIN Student e
ON d.CourseID = e.CourseID
LEFT JOIN Student_Session f
ON f.sessionID = a.SessionID AND
f.studentID = e.studentID
WHERE a.SessionID = 3 AND
f.studentID IS NULL
ORDER BY e.STUDENTALIAS
SQLFiddle Demo
关于mysql - 如何编译这个复杂的sql查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14248799/