Du kan gøre dette ved at samle ID'erne i en matrix og derefter sammenligne det med listen over påtænkte ID'er:
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'];
Ovenstående forudsætter, at venue.id
er erklæret som den primære nøgle (på grund af group by
).
Du behøver ikke rigtig at hardkode ID'erne i forespørgslen, hvis du bare vil videregive faciliteternes navne:
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'));
Online eksempel:https://rextester.com/FNNVXO34389