SQL语句与“IN”一起使用但是当尝试使用“NOT IN”获得相反(反向)结果时,它会输出所有内容

时间:2018-06-08 12:37:19

标签: sql oracle sql-in

我正在尝试输出所有在“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'声明。

如果有人能告诉我为什么这不起作用,并且可能告诉我这样做的正确方法会很棒。

1 个答案:

答案 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')
);