Como este hilo fue muy útil para mí, pensé en compartir mi solución.
Tuve un problema similar, quizás de aplicación más general que esta comparación específica de un solo conjunto. Estaba tratando de encontrar la identificación de un elemento que tenía un conjunto de elementos secundarios de elementos múltiples que coincidían con un conjunto de elementos de varios elementos.
La información de esquema relevante es:
table events, pk id
table solutions, pk id, fk event_id -> events
table solution_sources, fk solutionid -> solutions
columns unitsourceid, alpha
Consulta: encontrar la solución para el evento con id 110 que tiene el conjunto de solution_sources que coinciden con el conjunto de (unitsourceid, alfa) en ss_tmp. (Esto también se puede hacer sin la tabla tmp, creo.)
Solución:
with solutionids as (
select y.solutionid from (
select ss.solutionid, count(ss.solutionid) x
from solutions s, solution_sources ss
where s.event_id = 110 and ss.solutionid = s.id
group by ss.solutionid
) y where y.x = (select count(*) from ss_tmp)
)
select solutionids.solutionid from solutionids where
(
select case
when count(*) = (select count(*) from ss_tmp) then true
else false
end
from
(SELECT unitsourceid, alpha FROM solution_sources
where solutionid = solutionids.solutionid
INTERSECT
SELECT unitsourceid, alpha FROM ss_tmp) x
)
analiza una consulta de prueba de 4 elementos y una base de datos de prueba que tenía una solución coincidente (mismo número de niños elementos, cada uno que coincidía), varias soluciones completamente incompatibles, y 1 solución que tenía 3 elementos secundarios coincidentes, 1 solución que tenía los 4 elementos secundarios coincidentes, más un elemento adicional y 1 solución que tenía 4 elementos secundarios, de los cuales 3 de los 4 coincide con la consulta. Solo se devolvió la identificación del emparejamiento verdadero.
muchas gracias -Linus
¿No quieres que se cruzan ** ** ellos? –
Por cierto, si necesita ** buscar ** conjuntos coincidentes dentro de un conjunto * colección *, ese es un problema diferente, y las soluciones aquí pueden no ser de mucha ayuda. –