आप आईडी को एक सरणी में एकत्रित करके ऐसा कर सकते हैं और फिर उसकी तुलना इच्छित आईडी की सूची से कर सकते हैं:
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