PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Requête de jointure avec uniquement des colonnes contenant toutes les valeurs dans la clause "in"

Pour ce faire, vous pouvez agréger les ID dans un tableau, puis comparer cela avec la liste des ID prévus :

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

Ce qui précède suppose que venue.id est déclarée comme clé primaire (à cause du group by ).

Vous n'avez pas vraiment besoin de coder en dur les identifiants dans la requête si vous souhaitez simplement transmettre les noms des équipements :

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

Exemple en ligne :https://rextester.com/FNNVXO34389