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

Łączenie 2 zapytań SELECT

Wygląda na to, że chcesz utworzyć wynik, który zawiera listę 5 tramwajów jadących z jednej stacji do Rynku i 5 tramwajów jadących z Rynku do innej stacji. W tym przypadku - nie tworzysz żadnego połączenia (na przykład na czas) między tymi dwiema rzeczami - powinieneś dołączyć na pseudokolumnie, row_number() OVER () przychodzi mi na myśl:

SELECT '$name' AS name1, w1.time1, 'City Square - arrival' AS name2, w1.time2,
       'City Square - departure' AS name3, w2.time3, '$name2' AS name4, w2.time4
FROM (
  SELECT dt1.time AS time1, dt2.time AS time2, row_number() OVER () AS rn
  FROM departure_times AS dt1
  JOIN departure_times AS dt2 USING (tram_id)
  WHERE dt1.name = '$name' AND dt2.name = 'CitySquare'
  LIMIT 5) w1
JOIN (
  SELECT dt1.time AS time3, dt2.time AS time4, row_number() OVER () AS rn
  FROM departure_times AS dt1
  JOIN departure_times AS dt2 USING (tram_id)
  WHERE dt1.name = 'CitySquare' AND dt2.name = '$name2'
  LIMIT 5) w2 USING (rn);

W każdym z podzapytań wybierasz pięć interesujących Cię wierszy. Ponieważ nie ma widocznej właściwości, możesz JOIN te dwa zestawy wierszy, musisz utworzyć jakąś pseudokolumnę, która może służyć do tego celu (potrzebujesz czegoś do przyłączenia lub otrzymasz CROSS JOIN co daje w wyniku 5 x 5 wierszy). Korzystanie z row_number() OVER () AS rn robi właśnie to:tworzy nową kolumnę z aliasem rn który zawiera numer wiersza w całym zestawie wierszy (OVER () , 5 wierszy ze względu na LIMIT klauzula). Robisz to w obu podzapytaniach, więc możesz użyć tego jako warunku przyłączenia:USING (rn) . Nie musisz używać tej kolumny w danych wyjściowych.

Nie masz kontroli nad tym, które 5 razy tramwaje zostaną wymienione. Jeśli chcesz, powinieneś zrobić coś takiego jak WHERE dt1 > CURRENT_TIME i ORDER BY dt1 w obu podzapytaniach lub coś podobnego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd serwera OpenERP Odmowa dostępu

  2. ActiveRecord::StatementInvalid:PG::ReadOnlySqlTransaction:- Baza danych Heroku nadal tylko do odczytu, nawet po anulowaniu obserwowania

  3. PgBouncer 1.7 – „Kolory różnią się po zmartwychwstaniu”

  4. Przenieść kolumnę tekstową/bajtową PostgreSQL do dużego obiektu?

  5. Wiele indeksów a pojedynczy indeks w wielu kolumnach w postgresql