Выберите запись, с которой связаны определенные записи, но не связанные с ними - PullRequest
0 голосов
/ 24 августа 2018

Для отношений «многие ко многим», например, «Классы» и «Студенты», я бы хотел выбрать все Classes с точно данным членством.

Students         Classes        StudentClass
=========       ============    =================
id              id              student     class
--              ---             --------   -------
1               1               1           1
2               2               2           1
3                               3           1
4                               1           2
5                               2           2             
                                3           2
                                4           2

С примерами данных, если я дам запросS1, S2, S3 - он должен возвращать только класс 1 и исключать класс 4, потому что он содержит дополнительного студента.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Вот один вариант использования conditional aggregation:

select class
from studentclass
group by class
having count(case when student in (1,2,3) then 1 end) = 3
   and count(*) = 3
0 голосов
/ 24 августа 2018

SQL ЗДЕСЬ

Вы можете сделать это, как показано ниже:

select class from StudentClass
where class in(
    select class from StudentClass where student in(1,2,3) 
    group by class having count(distinct student)=3
) group by class
having count(distinct student)=3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...