Dari kueri Anda (format keterbacaan)
SELECT
table1.*,
tb21.year,
tb21.month,
tb21.day,
tb22.year,
tb22.month,
tb22.day
FROM
table1
LEFT JOIN table2 tb21
ON table1.year = tb21.year
AND table1.month = tb21.month
AND (tb21.day = table1.day
OR tb21.day = table1.day+1)
LEFT JOIN table2 tb22
ON table1.year = tb22.year
AND table1.month = tb22.month
AND (tb22.day = table1.day+2
OR tb22.day = table1.day+3)
Selain konten terbatas yang Anda berikan, mari kita lihat Anda mencoba membandingkan data dari hari yang sama ke hari +1, +2 dan +3. Mari kita asumsikan juga hanya untuk contoh ini Anda hanya memiliki 10 hari dalam tabel yang direpresentasikan sebagai semua 1 Juni - 10 Juni 2016 di tabel Tabel1 DAN Tabel2 Anda.
Sekali lagi, ini adalah asumsi bahwa setiap tabel memiliki 10 tanggal yang dipermasalahkan hanya untuk tujuan sederhana mengapa begitu banyak catatan. Jadi, untuk Tabel 1 tanggal 1 Juni 2016, akan memenuhi syarat dengan tabel 2 (versi tb21) dan mengembalikan DUA record. Satu untuk 1 Juni dan satu lagi untuk 2 Juni. Jadi sekarang Anda memiliki DUA catatan dalam hasil Anda. Sekarang, Anda melakukannya lagi dengan bergabung ke tabel 2 (versi tb22). Kali ini Anda mencari 2 dan 3 hari, di mana Anda memiliki 3 dan 4 Juni di tabel. Jadi, Anda mendapatkan hasil Cartesian. Jadi, untuk record 1 Juni di tabel 1, Anda sekarang memiliki 4 record sebagai berikut.
T1Year T1Month T1Day T21Day T22Day
2016 6 1 1 3
2016 6 1 1 4
2016 6 1 2 3
2016 6 1 2 4
Sekarang, katakanlah tabel 2 Anda memiliki 3 entri pada 2 Juni dan 3 entri pada 3 Juni dan data Anda akan menjadi sangat besar. Inilah sebabnya mengapa Anda perlu memberikan lebih banyak klarifikasi tentang apa yang Anda coba lakukan.
Jadi, tidak memiliki konteks yang benar tentang apa yang Anda cari, abaikan fakta bahwa itu tidak sepenuhnya memanfaatkan index. Anda memiliki ATAU berdasarkan tanggal melalui perbandingan hari. Itu tetap harus digunakan untuk kueri.