我正在尝试输出所有在“NSA编程”中没有成绩的学生。 使用“IN”代替“NOT IN”的相同查询适用于在“NSA编程”讲座中获得成绩的学生,
但是当我尝试使用'NOT IN'查询时,它会输出所有学生,现在只是那些在本讲座中没有成绩的学生。
SELECT oc_students.name, oc_students.last_name
FROM oc_students
INNER JOIN oc_grades ON oc_students.id_students=oc_grades.id_students
WHERE oc_grades.id_lecture
NOT IN (SELECT oc_lecturesid_lecture FROM oc_lectures WHERE lecture_name='NSA programming');
不确定我对'NOT IN'和'IN'的理解是否错误,但据我所知,这应该按预期工作,因为我只是颠倒'IN'声明。
如果有人能告诉我为什么这不起作用,并且可能告诉我这样做的正确方法会很棒。
答案 0 :(得分:2)
当您只想选择某些学生时,请不要加入。将您的条件放在它们所属的WHERE
子句中。
在NSA课程中获得成绩的学生:
SELECT name, last_name
FROM oc_students
WHERE id_students IN
(
SELECT id_students
FROM oc_grades
WHERE id_lecture =
(SELECT id_lecture FROM oc_lectures WHERE lecture_name = 'NSA programming')
);
在NSA课程中没有成绩的学生:
SELECT name, last_name
FROM oc_students
WHERE id_students NOT IN
(
SELECT id_students
FROM oc_grades
WHERE id_lecture =
(SELECT id_lecture FROM oc_lectures WHERE lecture_name = 'NSA programming')
);