sql >> Base de Datos >  >> RDS >> PostgreSQL

Únase a la consulta con solo columnas que tengan todos los valores en la cláusula `in`

Puede hacer esto agregando las ID en una matriz y luego compárela con la lista de ID previstas:

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

Lo anterior asume que venue.id se declara como la clave principal (debido al group by ).

Realmente no necesita codificar los ID en la consulta si solo desea pasar los nombres de servicios:

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

Ejemplo en línea:https://rextester.com/FNNVXO34389