Myslím, že jste po tomto:
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
Nemůžete použít AND, protože hodnoty nemohou být 24 red a 25 big a 27 round současně ve stejném řádku, ale musíte zkontrolovat přítomnost style_id, style_value ve více řádcích pod stejným image_id .
V tomto dotazu používám IN (to je v tomto konkrétním příkladu ekvivalentní OR) a počítám odlišné řádky, které se shodují. Pokud se shodují 3 různé řádky, znamená to, že pro daný image_id jsou přítomny všechny 3 atributy a můj dotaz to vrátí.