выберите группу строк, которая соответствует всем связанным с ней элементам в списке - PullRequest
0 голосов
/ 18 июня 2020

У меня есть таблица:

id|name
------
1|Tom
1|Lucy
1|Frank
2|Lucy
2|Frank
3|Frank
4|Jane
5|Robert
6|John

Нужен результат идентификатора, в котором все имена, связанные со спецификацией c идентификатор совпадают со списком

Список ('Люси' , 'Фрэнк', 'Джейн', 'Роберт', 'Брэндон').

Я пробовал это:

select id 
from table 
group by id 
having name in('Lucy','Frank','Jane','Robert','Brandon')

Полученный результат:

1
2
3
4
5

Желаемый результат:

2
3
4
5

Что исключено: счетчик (отдельный идентификатор)> 2000 список содержит 200 имен, и каждый идентификатор связан как минимум с 1 именем

1 Ответ

3 голосов
/ 18 июня 2020

Вы можете использовать агрегирование и предложение having, которое гарантирует, что ни один из name в группе не принадлежит к списку:

select id
from mytable
group by id
having max(name not in ('Lucy', 'Frank', 'Jane', 'Robert', 'Brandon')) = 0
...