Ik denk dat je dit zoekt:
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
U kunt AND niet gebruiken, omdat waarden niet 24 red
kunnen zijn en 25 big
en 27 round
tegelijkertijd in dezelfde rij, maar u moet de aanwezigheid van style_id, style_value
controleren in meerdere rijen, onder dezelfde image_id
.
In deze query gebruik ik IN (dat in dit specifieke voorbeeld gelijk is aan een OR), en ik tel de afzonderlijke rijen die overeenkomen. Als 3 verschillende rijen overeenkomen, betekent dit dat alle 3 de attributen aanwezig zijn voor die image_id
, en mijn vraag zal het retourneren.