sql >> Base de Datos >  >> RDS >> Mysql

Cómo encontrar si una lista/conjunto está exactamente dentro de otra lista

Todavía puedes usar having , pero prueba para cada producto, y para la ausencia de cualquier otro producto:

SELECT o.order_id
FROM orders o
GROUP BY o.order_id
HAVING SUM( product_id = 222 ) > 0 AND
       SUM( product_id = 555 ) > 0 AND
       SUM( product_id NOT IN (222, 555) ) = 0 ;

Tenga en cuenta que esto usa la abreviatura de MySQL, donde las expresiones booleanas se tratan como números con 1 para verdadero y 0 por falso La sintaxis estándar es:

HAVING SUM( CASE WHEN product_id = 222 THEN 1 ELSE 0 END) > 0 AND
       SUM( CASE WHEN product_id = 555 THEN 1 ELSE 0 END ) > 0 AND
       SUM( CASE WHEN product_id NOT IN (222, 555) THEN 1 ELSE 0 END ) = 0 ;