sql >> Database >  >> RDS >> PostgreSQL

Voeg query toe met alleen kolommen die alle waarden in de `in`-clausule hebben

U kunt dit doen door de ID's samen te voegen tot een array en die vervolgens te vergelijken met de lijst met beoogde ID's:

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'];

Het bovenstaande gaat ervan uit dat venue.id wordt gedeclareerd als de primaire sleutel (vanwege de group by ).

U hoeft de ID's in de zoekopdracht niet echt hard te coderen als u alleen de namen van de voorzieningen wilt doorgeven:

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 voorbeeld:https://rextester.com/FNNVXO34389



  1. 4 tips voor het uitvoeren van SQL Server-diagnose

  2. SQLiteOpenHelper:methode onCreate() niet aangeroepen op fysiek apparaat

  3. Hoe de MySql root-wachtwoordopdrachtregel in ubuntu linux te resetten/wijzigen?

  4. SQLite-queryresultaten opmaken als een HTML-tabel