PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menggabungkan 2 kueri SELECT

Dari tampilannya, Anda ingin membuat output yang mencantumkan 5 trem yang berangkat dari beberapa stasiun ke Alun-Alun Kota dan 5 trem yang berangkat dari Alun-Alun Kota ke beberapa stasiun lain. Dalam hal ini - Anda tidak membuat koneksi apa pun (misalnya, tepat waktu) antara dua hal ini - Anda harus bergabung pada kolom semu, row_number() OVER () terlintas di pikiran:

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

Di setiap sub-kueri, Anda memilih lima baris yang diinginkan. Karena tidak ada properti yang jelas, Anda dapat JOIN dua set baris ini aktif, Anda harus membuat beberapa kolom semu yang dapat melayani tujuan itu (Anda memerlukan sesuatu untuk bergabung atau Anda akan mendapatkan CROSS JOIN menghasilkan 5 x 5 baris dalam output). Menggunakan row_number() OVER () AS rn melakukan hal itu:ia membuat kolom baru dengan alias rn yang berisi nomor baris di seluruh rangkaian baris (OVER () , 5 baris karena LIMIT ayat). Anda melakukan ini di kedua sub-kueri sehingga Anda dapat menggunakannya sebagai kondisi gabungan:USING (rn) . Anda tidak harus menggunakan kolom ini di output.

Anda tidak memiliki kendali atas 5 waktu trem mana yang akan dicantumkan. Jika Anda menginginkannya, Anda harus melakukan sesuatu seperti WHERE dt1 > CURRENT_TIME dan ORDER BY dt1 di kedua sub-kueri, atau sesuatu di sepanjang baris itu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa mencocokkan dua kata terakhir dalam sebuah kalimat di PostgreSQL?

  2. PostgreSQL:Skrip SQL untuk mendapatkan daftar semua tabel yang memiliki kolom tertentu sebagai kunci asing

  3. Kesalahan dengan auto_increment saat terhubung ke Postgres melalui psql dan putTY

  4. Bagaimana cara melindungi dari injeksi SQL ketika klausa WHERE dibangun secara dinamis dari formulir pencarian?

  5. Bagaimana cara menentukan urutan yang akan digunakan saat membuat tabel dalam migrasi ActiveRecord di Ruby on Rails 5.2?