Мисля, че следите това:
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
Не можете да използвате И, защото стойностите не могат да бъдат 24 red
и 25 big
и 27 round
по едно и също време в същия ред, но трябва да проверите наличието на style_id, style_value
в няколко реда, под същия image_id
.
В тази заявка използвам IN (което в този конкретен пример е еквивалентно на ИЛИ) и броим отделните редове, които съвпадат. Ако 3 отделни реда съвпадат, това означава, че всички 3 атрибута присъстват за този image_id
, и моята заявка ще го върне.