SQL находит наборы с общими членами (реляционное деление)

У меня есть отдельные наборыклассы» а также "группы»каждому из которых был присвоен один или несколько тегов. Я хотел бы найти для каждой группы подмножество классов, которое содержит одинаковые (или более) теги для каждой группы.

Некоторые примеры данных:

declare @Groups table
(
    GroupID int,
    TagID int
)

insert @Groups
values (1,1),(1,2),(1,3),
    (2,1),(2,2),
    (3,1),(3,2),(3,3),(3,4)

declare @Classes table
(
    ClassID int,
    TagID int
)

insert @Classes
values (1,1),(1,2),
    (2,1),(2,2),
    (3,1),(3,2),(3,3)

select * from @Groups
select * from @Classes

И вывод:

GroupID TagID
1       1
1       2
1       3
2       1
2       2
3       1
3       2
3       3
3       4

ClassID TagID
1       1
1       2
2       1
2       2
3       1
3       2
3       3

Пример набора результатов будет выглядеть следующим образом:

declare @Results table
(
    GroupID int,
    ClassID int
)

insert @Results
values (1,3),(2,1),(2,2),(2,3),(3,null)

select * from @Results

Вывод результатов:

GroupID ClassID
1       3
2       1
2       2
2       3
3       NULL

Я понимаю, что это проблема типа реляционного деления, включающаяhaving а такжеcount, Эти посты описывают то, что я хочу сделать, но я могуt выяснить, как применить примеры к конкретному случаю выше:

http://weblogs.sqlteam.com/peterl/archive/2010/07/02/Proper-Relational-Division-With-Sets.aspxSQL Join, только если все записи имеют совпадениеКак я могу структурировать запрос, чтобы дать мне только те строки, которые соответствуют ВСЕМ значениям в списке идентификаторов CSV в T-SQLSQL: выбрать наборы, содержащие точно заданные членыSQL-запрос для поиска пользователей с общими тегами в определенном наборе

Ответы на вопрос(2)

Ваш ответ на вопрос