Bạn có thể thực hiện việc này bằng cách tổng hợp các ID thành một mảng và sau đó so sánh mảng đó với danh sách các ID dự định:
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'];
Phần trên giả định rằng venue.id
được khai báo là khóa chính (vì nhóm group by
).
Bạn không thực sự cần phải mã hóa cứng các ID trong truy vấn nếu bạn chỉ muốn chuyển các tên tiện nghi:
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'));
Ví dụ trực tuyến:https://rextester.com/FNNVXO34389