Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL语句与“;在;但当试图得到与“相反”的结果时;不在「;它输出一切_Sql_Oracle_Sql In - Fatal编程技术网

SQL语句与“;在;但当试图得到与“相反”的结果时;不在「;它输出一切

SQL语句与“;在;但当试图得到与“相反”的结果时;不在「;它输出一切,sql,oracle,sql-in,Sql,Oracle,Sql In,我试图输出所有在“NSA编程”中没有分数的学生。 对于在“NSA编程”课程中取得成绩的学生来说,使用“IN”而不是“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

我试图输出所有在“NSA编程”中没有分数的学生。 对于在“NSA编程”课程中取得成绩的学生来说,使用“IN”而不是“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');
不确定我对“不在”和“在”的理解是否错误,但从我所能看出,这应该是预期的效果,因为我只是颠倒了“在”陈述


如果有人能告诉我为什么这不起作用,也许能告诉我正确的方法,那就太棒了。

当你只想选择某些学生时,不要加入。将您的条件放在
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')
);
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')
);
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')
);
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')
);

如果您只想选择某些学生,请不要加入。将您的条件放在
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')
);
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')
);
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')
);
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')
);

请不要使用不适用于您的问题的标记。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请仅添加实际使用的数据库的标记,注意子查询中的空值!(我通常建议
不存在
而不是
不在
中)您确定在/
不在
中反转
实际上是反转您的查询吗?您的所有学生是否都至少参加过一次非NSA编程的讲座?抱歉,标记错误,请更正。我的数据库中没有空值@Damien_不信者是的,这是正确的。学生在其他课程中也有分数。根据我的理解,“不在”的工作方式是,如果学生在“NSA编程”中没有那个特定的分数,即使他在其他地方有分数,它也会输出他?你应该使用左连接而不是空。请不要使用不适用于你的问题的标记。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请仅添加实际使用的数据库的标记,注意子查询中的空值!(我通常建议
不存在
而不是
不在
中)您确定在
/
不在
中反转
实际上是反转您的查询吗?您的所有学生是否都至少参加过一次非NSA编程的讲座?抱歉,标记错误,请更正。我的数据库中没有空值@Damien_不信者是的,这是正确的。学生在其他课程中也有分数。根据我的理解,“不在”的工作方式是,如果学生在“NSA编程”中没有那个特定的分数,即使他在其他地方有分数,它也会输出他?你应该使用带NOTNULL的left join