Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So finden Sie heraus, ob sich eine Liste/ein Satz genau in einer anderen Liste befindet

Sie können immer noch having verwenden , aber testen Sie für jedes Produkt -- und für das Fehlen eines anderen Produkts:

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 ;

Beachten Sie, dass dies die MySQL-Kurzschrift verwendet, bei der boolesche Ausdrücke als Zahlen mit 1 behandelt werden für wahr und 0 für falsch. Die Standard-Syntax ist:

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 ;