引き続きhaving
を使用できます 、ただし、各製品についてテストします。他の製品がないかどうかをテストします。
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 ;
これはMySQLの省略形を使用していることに注意してください。ここでは、ブール式は1
の数値として扱われます。 trueおよび0
の場合 偽の場合。標準の構文は次のとおりです。
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 ;