Vous devez ajouter un prédicat pour chaque combinaison nom/valeur :
SELECT <whatever you need>
FROM Entity_Table et
WHERE et.e_name = 'Joe'
AND EXISTS (SELECT 1
FROM AttributeValue_Table avt
JOIN Entity_AttrVal ea ON ea.e_id = et.e_id
WHERE ea.a_id = avt.av_id
AND avt.prop_name = 'color'
AND avt.prop_value = 'black')
AND EXISTS (SELECT 1
FROM AttributeValue_Table avt
JOIN Entity_AttrVal ea ON ea.e_id = et.e_id
WHERE ea.a_id = avt.av_id
AND avt.prop_name = 'whiskers'
AND avt.prop_value = 'short')
(Je m'excuse si mon dialecte Sql Server transparaît)
Pour faire un nombre arbitraire de comparaisons, vous devez générer le SQL et l'exécuter.
Comme dit dans un commentaire, cela montre que l'EAV est une douleur (un anti-modèle, vraiment), mais je sais par expérience que parfois il n'y a tout simplement pas d'alternative si nous sommes liés à une base de données relationnelle.