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

Postgres Kiri Gabung dengan kondisi dimana

kiri gabungkan dua tabel dengan kondisi where

Biasanya salah untuk menggunakan LEFT [OUTER] JOIN lalu filter dengan WHERE kondisi, sehingga membatalkan fitur khusus dari LEFT JOIN untuk memasukkan semua baris dari tabel kiri tanpa syarat . Penjelasan detail:

  • Jelaskan JOIN vs. LEFT JOIN dan saran kinerja kondisi WHERE secara lebih rinci

Masukkan kondisi yang seharusnya memfilter semua baris ke dalam WHERE klausa (rid = 2 ), tetapi buat kondisi untuk bergabung ke kiri baris dari record_table keluar menjadi kondisi bergabung yang sebenarnya:

SELECT t.start_date, t.end_date  -- adding those
     , r.id, r.name, r.date 
FROM   time_table t
LEFT   JOIN record_table r ON r.date >= t.start_date
                          AND r.date <  t.end_date
WHERE  t.rid = 2;

Seperti yang dikomentari, masuk akal untuk menyertakan kolom dari time_table dalam hasil, tapi itu tambahan opsional saya.

Anda juga harus jelas tentang batas bawah dan atas . Konvensi umum adalah menyertakan bagian bawah dan kecualikan batas atas dalam waktu (timestamp ) berkisar. Karenanya saya menggunakan >= dan < di atas.

Terkait:

  • Kueri SQL pada deret waktu untuk menghitung rata-rata
  • Memilih rata-rata rekaman yang dikelompokkan berdasarkan periode 5 menit

Performa seharusnya tidak ada masalah sama sekali dengan indeks yang tepat. Anda memerlukan indeks (atau PK) pada time_table(rid) dan satu lagi di record_table(date) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengatur ulang urutan ID pada tabel PostgreSQL

  2. Bagaimana cara menulis fungsi yang mengembalikan nilai teks atau bilangan bulat?

  3. Menguji fungsi PostgreSQL yang menggunakan dan mengembalikan refcursor

  4. cara memperbaiki OperationalError:(psycopg2.OperationalError) server menutup koneksi secara tidak terduga

  5. Temukan nama host dan port menggunakan perintah PSQL