Jag tror att du är ute efter det här:
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
Du kan inte använda OCH eftersom värden inte kan vara 24 red
och 25 big
och 27 round
samtidigt på samma rad, men du måste kontrollera förekomsten av style_id, style_value
i flera rader, under samma image_id
.
I den här frågan använder jag IN (som i det här exemplet motsvarar ett OR), och jag räknar de distinkta raderna som matchar. Om 3 distinkta rader matchar betyder det att alla 3 attributen finns för det image_id
, och min fråga kommer att returnera den.