Creo que buscas esto:
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
No puede usar AND, porque los valores no pueden ser 24 red
y 25 big
y 27 round
al mismo tiempo en la misma fila, pero debe verificar la presencia de style_id, style_value
en varias filas, bajo el mismo image_id
.
En esta consulta estoy usando IN (que, en este ejemplo particular, es equivalente a OR), y estoy contando las distintas filas que coinciden. Si coinciden 3 filas distintas, significa que los 3 atributos están presentes para ese image_id
, y mi consulta lo devolverá.