Conjuntos de búsqueda de SQL con miembros comunes (división relacional)
Tengo conjuntos separados de "clases" y "grupos", a cada uno de los cuales se les ha asignado una o más etiquetas. Me gustaría encontrar, para cada grupo, el subconjunto de clases que contiene las mismas (o más) etiquetas para cada grupo.
Algunos datos de muestra:
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
Y salida:
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
Un conjunto de resultados de ejemplo se vería así:
declare @Results table
(
GroupID int,
ClassID int
)
insert @Results
values (1,3),(2,1),(2,2),(2,3),(3,null)
select * from @Results
Resultados de salida:
GroupID ClassID
1 3
2 1
2 2
2 3
3 NULL
Entiendo que este es un problema de tipo de división relacional, que involucrahaving
ycount
. Estas publicaciones describen lo que quiero hacer, pero no puedo averiguar cómo aplicar los ejemplos al caso particular anterior: