これは
COUNT
で提案する方法 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
NOT EXISTS
を2つ使用する別のアプローチがあります リンクされた記事にありますが、MySQLはCTEをサポートしていないため、非常に面倒です。