sql >> Databáze >  >> RDS >> PostgreSQL

Připojit dotaz pouze se sloupci, které mají všechny hodnoty v klauzuli `in`

Můžete to udělat agregací ID do pole a poté to porovnat se seznamem zamýšlených ID:

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

Výše uvedené předpokládá, že venue.id je deklarován jako primární klíč (kvůli group by ).

Pokud chcete předat pouze názvy vybavení, nemusíte v dotazu napevno kódovat ID:

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

Online příklad:https://rextester.com/FNNVXO34389



  1. Chyba zabezpečení Joomla SQL Injection

  2. Oracle Odstraňte řádky odpovídající více hodnotám

  3. Jak funguje SET ROWCOUNT v SQL Server

  4. Jak převedu interval na počet hodin pomocí postgres?