Saya pikir Anda mengejar ini:
SELECT image_id
FROM list
WHERE (style_id, style_value) IN ((24,'red'),(25,'big'),(27,'round'))
GROUP BY image_id
HAVING count(distinct style_id, style_value)=3
Anda tidak dapat menggunakan AND, karena nilainya tidak boleh 24 red
dan 25 big
dan 27 round
pada saat yang sama di baris yang sama, tetapi Anda perlu memeriksa keberadaan style_id, style_value
dalam beberapa baris, di bawah image_id
yang sama .
Dalam kueri ini saya menggunakan IN (dalam contoh khusus ini, setara dengan OR), dan saya menghitung baris berbeda yang cocok. Jika 3 baris berbeda cocok, itu berarti semua 3 atribut ada untuk image_id
itu , dan kueri saya akan mengembalikannya.