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