Je pense que vous recherchez ceci :
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
Vous ne pouvez pas utiliser AND, car les valeurs ne peuvent pas être 24 red
et 25 big
et 27 round
en même temps dans la même ligne, mais vous devez vérifier la présence de style_id, style_value
sur plusieurs lignes, sous le même image_id
.
Dans cette requête, j'utilise IN (qui, dans cet exemple particulier, équivaut à un OR), et je compte les lignes distinctes qui correspondent. Si 3 lignes distinctes correspondent, cela signifie que les 3 attributs sont présents pour cet image_id
, et ma requête le renverra.