PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Unisci la query con solo le colonne che hanno tutti i valori nella clausola `in`

Puoi farlo aggregando gli ID in un array e quindi confrontandolo con l'elenco degli ID previsti:

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

Quanto sopra presuppone che venue.id è dichiarata come chiave primaria (a causa di group by ).

Non hai davvero bisogno di codificare gli ID nella query se desideri semplicemente passare i nomi delle amenità:

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

Esempio online:https://rextester.com/FNNVXO34389