Đây là phép chia quan hệ vấn đề.
Cách bạn đề xuất với COUNT
có lẽ là dễ nhất trong MySQL
SELECT product_id
FROM product_attributes pa
WHERE (attribute='size' and value='medium')
OR (attribute='colour' and value='blue')
GROUP BY product_id
HAVING COUNT(DISTINCT CONCAT(attribute,value) ) = 2
Có một cách tiếp cận khác với đôi NOT EXISTS
trong bài viết được liên kết nhưng vì MySQL không hỗ trợ CTE nên sẽ khá cồng kềnh.