Jeg tror, du er ude efter dette:
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 ikke bruge OG, fordi værdier ikke kan være 24 red
og 25 big
og 27 round
på samme tid i samme række, men du skal kontrollere tilstedeværelsen af style_id, style_value
i flere rækker under samme image_id
.
I denne forespørgsel bruger jeg IN (som i dette særlige eksempel svarer til en OR), og jeg tæller de forskellige rækker, der matcher. Hvis 3 forskellige rækker matcher, betyder det, at alle 3 attributter er til stede for det image_id
, og min forespørgsel vil returnere den.