我正在尝试找到可以注册类(class)的剩余学生。为此,我需要找到当前活跃的学生和当前不在类(class)中的学生。但是我认为我正在编写的查询不正确,因为当我运行查询时它一直显示一组空结果,我如何才能找到剩余的能够注册该类(class)的学生?
以下是当前查询:
SELECT st.StudentId, StudentAlias, StudentForename, StudentSurname
FROM Course c
INNER JOIN Student_Course sc
ON c.CourseId = sc.CourseId
INNER JOIN Student st
ON sc.StudentId = st.StudentId
WHERE (c.CourseId = 1 AND
sc.StudentId IS NULL
AND st.Active = 1)
ORDER BY st.StudentAlias
下面是表格:
学生:(所有学生的列表)
StudentId StudentAlias StudentForename StudentSurname Active
1 u09382 James Smith 1
2 u83923 John Brooks 1
3 u38292 Karen Bradshaw 0
4 u20039 Chris Cameron 1
5 u39399 Jane Fields 1
类(class):(所有类(class)列表)
CourseId CourseNo CourseName
1 INFO121 ICT
2 BUS122 Business and Finance
3 ENG432 English Language
Student_Course:(参加相应类(class)的学生名单)
StudentId CourseId
1 1
1 3
2 1
4 2
5 2
例如,如果我选择 CourseId = 1
,那么它应该显示活跃但显然不在 CourseId = 1
中的学生,这意味着它应该显示这些以下学生是否有可能入读类(class):
4 - Chris Cameron
5 - Jane Fields
最佳答案
试试这个查询
SELECT s.studentId, s.Forename
FROM Student s
WHERE s.studentId NOT IN (SELECT studentId
FROM Student_Course c WHERE c.courseId = 1) AND s.Active = 1
内部子查询返回 courseId =1 的学生,在外部查询中我们过滤这些学生。
关于mysql - 如何编写正确的查询以查找当前不在类(class)中的学生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15156000/