Anda dapat melakukannya dengan menggabungkan ID ke dalam larik lalu membandingkannya dengan daftar ID yang dimaksud:
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'];
Di atas mengasumsikan bahwa venue.id
dideklarasikan sebagai kunci utama (karena group by
).
Anda tidak perlu melakukan hardcode ID dalam kueri jika Anda hanya ingin meneruskan nama fasilitas:
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'));
Contoh online:https://rextester.com/FNNVXO34389