Myślę, że jesteś po tym:
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
Nie możesz użyć AND, ponieważ wartości nie mogą być 24 red
i 25 big
i 27 round
jednocześnie w tym samym wierszu, ale musisz sprawdzić obecność style_id, style_value
w wielu wierszach, pod tym samym image_id
.
W tym zapytaniu używam IN (co w tym konkretnym przykładzie jest równoważne OR) i liczę różne pasujące wiersze. Jeśli pasują 3 różne wiersze, oznacza to, że wszystkie 3 atrybuty są obecne dla tego image_id
, a moje zapytanie go zwróci.