Pour ce faire, vous pouvez agréger les ID dans un tableau, puis comparer cela avec la liste des ID prévus :
select v.*
from venues v
join amenity_venue av ON av.venue_id = v.id
group by v.id
having array_agg(av.amenity_id) @> array['aaa', 'bbb'];
Ce qui précède suppose que venue.id
est déclarée comme clé primaire (à cause du group by
).
Vous n'avez pas vraiment besoin de coder en dur les identifiants dans la requête si vous souhaitez simplement transmettre les noms des équipements :
select v.*
from venues v
join amenity_venue av ON av.venue_id = v.id
group by v.id
having array_agg(av.amenity_id) @> array(select id
from amenities
where name in ('first amenity', 'second amenity'));
Exemple en ligne :https://rextester.com/FNNVXO34389