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í.