PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Połącz zapytanie tylko z kolumnami, które mają wszystkie wartości w klauzuli `in`

Możesz to zrobić, agregując identyfikatory w tablicę, a następnie porównując to z listą zamierzonych identyfikatorów:

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

Powyższe zakłada, że ​​venue.id jest zadeklarowany jako klucz podstawowy (ponieważ grupa group by ).

Naprawdę nie musisz zakodować identyfikatorów w zapytaniu, jeśli chcesz po prostu przekazać nazwy udogodnień:

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

Przykład online:https://rextester.com/FNNVXO34389



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepsze narzędzia Open Source do migracji PostgreSQL

  2. Dynamicznie generuj kolumny dla tabeli krzyżowej w PostgreSQL

  3. Tworzenie użytkownika PostgreSQL i dodawanie go do bazy danych

  4. Konfiguracja bazy danych ActiveRecord::AdapterNotSpecified nie określa adaptera

  5. Jak utworzyć histogram w PostgreSQL