Můžete to udělat agregací ID do pole a poté to porovnat se seznamem zamýšlených ID:
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'];
Výše uvedené předpokládá, že venue.id
je deklarován jako primární klíč (kvůli group by
).
Pokud chcete předat pouze názvy vybavení, nemusíte v dotazu napevno kódovat ID:
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 příklad:https://rextester.com/FNNVXO34389