単一の行がWHERE句と一致することはないため、現在のクエリは矛盾しています。このようなものが欲しいと思います。
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
単一の行がWHERE句と一致することはないため、現在のクエリは矛盾しています。このようなものが欲しいと思います。
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