mysql - 如何编写正确的查询以查找当前不在课程中的学生

原文 标签 mysql sql database

我正在尝试寻找可以注册的剩余学生。为此,我需要找到当前活跃且当前不在课程中的学生。 Bu我认为我正在编写的查询是不正确的,因为在运行查询时它会一直显示一组空白的结果,我如何才能找到能够参加该课程的其余学生?

以下是当前查询:

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


课程:(所有课程列表)

CourseId  CourseNo  CourseName
1         INFO121   ICT
2         BUS122    Business and Finance
3         ENG432    English Language


Student_Course :(已注册各门课程的学生名单)

StudentId  CourseId
1          1
1          3
2          1
4          2
5          2


因此,例如,如果我选择CourseId = 1,则它应该显示活跃的学生,但显然不在CourseId = 1中,这意味着它应该在下面显示这些学生,以供注册:

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的学生,在外部查询中我们过滤这些学生。

相关文章:

java - 获取Spring嵌入式数据库内容

php - 从SQL检索数据以显示为XML

mysql - 实际上,在相关规范的何处记载了SQL脚本中的某些注释应作为有效的SQL(由MySQL)执行?

database - Django中的变量表名称

mysql - 单元格的未使用长度/值

mysql - SQL:区分更新失败的多个条件

php - Mysql导致PHP - 数组或对象?

mysql - 仅检查有效期,间隔为一个月

java - 功能<数据库名称>。 TOP不存在

php - 如何基于多个复选框进行mysql查询