Penso che tu stia cercando questo:
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
Non puoi usare AND, perché i valori non possono essere 24 red
e 25 big
e 27 round
contemporaneamente nella stessa riga, ma è necessario verificare la presenza di style_id, style_value
in più righe, sotto lo stesso image_id
.
In questa query sto usando IN (che, in questo particolare esempio, equivale a un OR) e sto contando le righe distinte che corrispondono. Se 3 righe distinte corrispondono, significa che tutti e 3 gli attributi sono presenti per quel image_id
e la mia richiesta lo restituirà.