SQL найти ученика, который никогда не был в классе (без подзапросов и агрегатов) - PullRequest
0 голосов
/ 07 мая 2020

Итак, у нас есть две таблицы: ученики

id | name
1  | st1
2  | st2
3  | st3

классы

id | title    | student_id | visited
1  | class1   |  1         | false
2  | class2   |  1         | true
3  | class3   |  1         | false
4  | class4   |  1         | false
5  | class5   |  2         | true
6  | class6   |  3         | false

И вопрос: как найти учеников, которые никогда не были на занятиях без подзапросов и агрегатных функций (разрешены только соединения и псевдонимы). Я честно пытался найти решение, но потерпел неудачу и потерял надежду, что оно вообще существует.

1 Ответ

1 голос
/ 07 мая 2020

В SQL я бы сделал это с отфильтрованным внешним соединением:

select s.*
from students s
  left join classes c on s.id = c.student_id and c.visited
where c.id is null;

Но условие НЕ СУЩЕСТВУЕТ с подзапросом, как правило, более эффективно.

Онлайн-пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...