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 выяснить, как применить примеры к конкретному случаю выше: