Вашата подзаявка трябва да бъде следната:
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
това решение използва подзаявка GROUP BY. Трябва да използвате ИЛИ, тъй като атрибутът не може да бъде Памет и Цвят по едно и също време на един и същи ред, те могат да бъдат верни, но на различни редове. COUNT(DISTINCT attributes.name) брои числовите атрибути, които са или Цвят, или Памет, ако е 2, тогава има поне 1 ред, където първото условие е вярно, и 1 ред, където другото също е вярно.