Оператор SQL работает с «IN», но при попытке получить противоположный (инвертированный) результат с «NOT IN» выводит все - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь вывести всех студентов, которые не имеют оценок по «Программированию АНБ».Этот же запрос с «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');

Не уверен, что мое понимание «НЕ В» и «В» неверно, но из того, что я могу сказать, это должно бытьработаю так, как задумано, поскольку я просто поменяю местами оператор IN.

Если кто-нибудь скажет мне, почему это не работает, и, возможно, покажет мне правильный способ сделать это, что было бы здорово.

1 Ответ

0 голосов
/ 08 июня 2018

Не присоединяйтесь, если вы хотите выбрать только определенных студентов.Поместите ваши условия в пункт WHERE, где они принадлежат.

Учащиеся с оценками по программированию АНБ:

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')
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...