Mysql
 sql >> Database >  >> RDS >> Mysql

Come scoprire se un elenco/insieme è esattamente all'interno di un altro elenco

Puoi ancora usare having , ma verifica per ogni prodotto -- e per l'assenza di qualsiasi altro prodotto:

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 ;

Nota che questo utilizza la scorciatoia MySQL, in cui le espressioni booleane sono trattate come numeri con 1 per true e 0 per falso. La sintassi standard è:

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 ;