Du kan göra detta genom att aggregera ID:n i en array och sedan jämföra det med listan över avsedda ID:n:
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'];
Ovanstående förutsätter att venue.id
deklareras som primärnyckeln (på grund av group by
).
Du behöver egentligen inte hårdkoda ID:n i frågan om du bara vill skicka bekvämlighetsnamnen:
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'));
Onlineexempel:https://rextester.com/FNNVXO34389