Bạn vẫn có thể sử dụng having
, nhưng thử nghiệm cho từng sản phẩm - và nếu không có bất kỳ sản phẩm nào khác:
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 ;
Lưu ý rằng điều này sử dụng viết tắt MySQL, trong đó các biểu thức boolean được coi là số với 1
cho true và 0
cho sai. Cú pháp chuẩn là:
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 ;