Можете да направите това, като агрегирате идентификаторите в масив и след това го сравните със списъка с предназначени идентификатори:
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'];
Горното предполага, че venue.id
е деклариран като първичен ключ (поради group by
).
Всъщност не е необходимо да кодирате идентификаторите в заявката, ако искате просто да предадете имената на удобствата:
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'));
Онлайн пример:https://rextester.com/FNNVXO34389