Ini adalah pembagian relasional masalah.
Cara yang Anda sarankan dengan COUNT
mungkin yang termudah di 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
Ada pendekatan lain dengan NOT EXISTS
ganda double di artikel tertaut tetapi karena MySQL tidak mendukung CTE, itu akan sangat merepotkan.