Acho que você está atrás disso:
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
Você não pode usar AND porque os valores não podem ser
24 red
e 25 big
e 27 round
ao mesmo tempo na mesma linha, mas você precisa verificar a presença de style_id, style_value
em várias linhas, sob o mesmo image_id
. Nesta consulta estou usando IN (que, neste exemplo específico, é equivalente a um OR), e estou contando as linhas distintas que correspondem. Se 3 linhas distintas corresponderem, significa que todos os 3 atributos estão presentes para esse
image_id
, e minha consulta o retornará.