PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Consulta de junção apenas com colunas que possuem todos os valores na cláusula `in`


Você pode fazer isso agregando os IDs em uma matriz e comparando-os com a lista de IDs pretendidos:
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'];

O acima assume que venue.id é declarado como a chave primária (por causa do group by ).

Você realmente não precisa codificar os IDs na consulta se quiser apenas passar os nomes das comodidades:
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'));

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