Din underfråga bör vara så här:
SELECT
attributes_entity.product_id
FROM
attributes_entity INNER JOIN attributes
ON attributes_entity.attribute_id=attributes.id
INNER JOIN attributes_values ON
attributes_entity.value_id=attributes_values.id
WHERE
(attributes.name="Memory" AND attributes_values.value="16GB")
OR
(attributes.name="Color" AND attributes_values.value="Gold")
GROUP BY
attributes_entity.product_id
HAVING
COUNT(DISTINCT attributes.name)=2
denna lösning använder en GROUP BY-underfråga. Du måste använda OR eftersom attributet inte kan vara Memory och Color samtidigt på samma rad, de kan båda vara sanna men på olika rader. COUNT(DISTINCT attributes.name) räknar antalet attribut som antingen Color eller Memory, om det är 2 så finns det minst 1 rad där det första villkoret är sant och 1 rad där det andra också är sant.