Truy vấn hiện tại của bạn mâu thuẫn vì một hàng không bao giờ có thể khớp với mệnh đề WHERE. Tôi cho rằng bạn muốn một cái gì đó như thế này.
SELECT product_id
FROM table
WHERE (key='free_shipping' and value='yes') or (key='price' and value='5')
GROUP BY product_id
HAVING COUNT(DISTINCT key) = 2