Subquery Anda seharusnya seperti ini:
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
solusi ini menggunakan subquery GROUP BY. Anda harus menggunakan OR karena atributnya tidak bisa Memori dan Warna pada saat yang sama pada baris yang sama, keduanya bisa benar tetapi pada baris yang berbeda. COUNT(DISTINCT atribut.nama) menghitung jumlah atribut baik Warna atau Memori, jika 2 maka setidaknya ada 1 baris di mana kondisi pertama benar dan 1 baris di mana yang lain juga benar.