SQL encontra conjuntos com membros comuns (divisão relacional)
Eu tenho conjuntos separados de "classes" e "grupos", cada um dos quais foi atribuído um ou mais tags. Eu gostaria de encontrar, para cada grupo, o subconjunto de classes que contém as mesmas (ou mais) tags para cada grupo.
Alguns dados de amostra:
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
E saída:
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
Um exemplo de conjunto de resultados seria assim:
declare @Results table
(
GroupID int,
ClassID int
)
insert @Results
values (1,3),(2,1),(2,2),(2,3),(3,null)
select * from @Results
Resultados da saída:
GroupID ClassID
1 3
2 1
2 2
2 3
3 NULL
Eu entendo que este é um problema do tipo de divisão relacional, envolvendohaving
ecount
. Essas postagens descrevem o que eu quero fazer, mas não consigo descobrir como aplicar os exemplos ao caso específico acima: