Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como descobrir se uma lista/conjunto está exatamente dentro de outra lista


Você ainda pode usar having , mas teste para cada produto -- e para a ausência de qualquer outro produto:
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 ;

Observe que isso usa a abreviação do MySQL, onde as expressões booleanas são tratadas como números com 1 para true e 0 para falso. A sintaxe padrão é:
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 ;