Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara membuat beberapa LEFT JOIN dengan ATAU sepenuhnya menggunakan indeks komposit?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli_connect():(HY000/2002):Tidak dapat terhubung ke server MySQL lokal melalui soket

  2. Cara Mengoptimalkan Kinerja MySQL Menggunakan MySQLTuner

  3. Laravel 8.x Tempat Pencarian Json Di Array

  4. Masukkan data ke tabel sekaligus yang mengambil dari perintah pilih mySQL

  5. Pengaturan tabel lintang dan bujur MySQL