我想返回一份在一个系上过课但没有在另一个系上过课的学生的列表。这是我的查询,由于某种原因,它的结果是空白的。
SELECT *
FROM student
JOIN transcript
ON student.id = transcript.studID
JOIN course
ON transcript.crsCode = course.crsCode
WHERE deptId = "CSCI" NOT IN
(
SELECT student.name
FROM student
JOIN transcript
ON student.id = transcript.studID
JOIN course
ON transcript.crsCode = course.crsCode
WHERE deptId = "MATH"
);
表格如下:
Student (id, name, address, status)
Transcript (studId, crsCode, semester, grade)
Courses (crsCode, deptId, crsName, descr)
最佳答案
不使用子查询:-
SELECT DISTINCT student.*
FROM student
JOIN transcript
ON student.id = transcript.studID
INNER JOIN course c1
ON transcript.crsCode = c1.crsCode
AND c1.deptId = 'CSCI'
LEFT OUTER JOIN course c2
ON transcript.crsCode = c2.crsCode
AND c2.deptId = 'MATH'
WHERE c2.crsCode IS NULL
这是加入学生对抗成绩单。然后它针对 course 加入两次,一次用于您想要的类(class),一次用于您不想要的类(class)。 WHERE 子句检查您不想要的类(class)是否没有匹配项。
DISTINCT 用于将结果限制为单次出现。这可能不是必需的,但这取决于一个学生是否可以多次完成类(class)。
关于mysql - 如何在 MySQL 中查询不包含来自另一个集合的任何成员的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377223/