Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment savoir si une liste/un ensemble se trouve exactement dans une autre liste

Vous pouvez toujours utiliser having , mais testez pour chaque produit -- et pour l'absence de tout autre produit :

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 ;

Notez que cela utilise le raccourci MySQL, où les expressions booléennes sont traitées comme des nombres avec 1 pour vrai et 0 pour faux. La syntaxe standard est :

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 ;