sql >> Databasteknik >  >> RDS >> PostgreSQL

Gå med i frågan med endast kolumner som har alla värden i "in"-satsen

Du kan göra detta genom att aggregera ID:n i en array och sedan jämföra det med listan över avsedda ID:n:

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

Ovanstående förutsätter att venue.id deklareras som primärnyckeln (på grund av group by ).

Du behöver egentligen inte hårdkoda ID:n i frågan om du bara vill skicka bekvämlighetsnamnen:

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

Onlineexempel:https://rextester.com/FNNVXO34389



  1. Skapa en tabell i SQL Server (T-SQL)

  2. Oracle PLS-00363:uttryck '' kan inte användas som ett tilldelningsmål

  3. Hibernate Långsam för att få Postgres-anslutning

  4. SQLite JSON_REPLACE()