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

SQL Self-join dengan perbandingan data untuk hari yang berbeda

Anda mendapatkan kolom duplikat karena seperti yang Anda miliki, Anda meminta dari T1 DAN T2. Jadi, kecuali jika Anda secara eksplisit mengatakan tunjukkan hanya T1.* itu akan mengambil kolom dari KEDUA tabel alias referensi.

Karena kueri Anda melakukan OR pada tanggal, Anda mungkin akan mendapatkan hasil Cartesian juga.

Sekarang mengetahui struktur tabel Anda, tetapi Anda mungkin lebih baik dengan kueri eksplisit seperti...

SELECT
      t1.day,
      t2.day as OtherDay,
      t1.quality,
      t1.anotherColumn,
      t2.OtherAnotherColumn,
      t1.thirdColumn,
      t2.OtherThirdColumn
   FROM 
      my_table t1
         join my_table t2
            on t1.quality = t2.quality
           AND t2.day = '2015-01-09'
   where
      t1.day = '2015-01-08' 

Miliki indeks pada "my_table" Anda berdasarkan (hari, kualitas) untuk mengoptimalkan kueri. Dan Anda bisa terus menambahkan berpasangan, kolom yang Anda coba bandingkan antara hari1 dan hari2. T1 hanya akan mengembalikan yang terkait dengan hari pertama, dan alias T2 hanya akan ditampilkan untuk entri yang cocok untuk tanggal kedua.

Sekarang, jika hanya ada entri di sisi T1 tanpa entri T2 yang sesuai untuk kualitas dan tanggal yang bersangkutan, tetapi Anda masih ingin melihatnya, maka cukup ubah GABUNG menjadi GABUNG KIRI.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan Python dan MySQL dalam Proses ETL:SQLAlchemy

  2. Pernyataan yang disiapkan tidak mengizinkan saya memanggil $mysqli->stmt_init()

  3. php:sesi vs. database

  4. Tampilkan gambar gumpalan dalam html dengan angularjs

  5. Strategi untuk menangani persyaratan yang terus berubah untuk skema MySQL?