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

Doctrine DQL bergabung di kolom nullable

Solusi 1:Doktrin SQL Asli

Salah satu cara untuk mencapai ini adalah dengan menggunakan kueri MySQL asli. Ini memerlukan penggunaan SQL Asli Doktrin menampilkan dan memetakan hasil kueri menggunakan ResultSetMapping .

Saya menemukan masalah saat menjalankan kueri SQL Asli dua kali (dengan parameter berbeda), bahwa kumpulan hasil kueri kedua sama dengan yang pertama.Mengikuti pos di GitHub memecahkan ini untuk saya.

Solusi 2:Menggunakan pengoptimal internal MySQL

Menggunakan kondisi bergabung berikut akan menggunakan pengoptimal internal MySQL dan memperlakukan ini sebagai ref_or_null tipe gabungan

SELECT a.*, b.* 
FROM a
   INNER JOIN b ON 
       a.column = b.column 
       OR (a.column IS NULL AND b.column IS NULL)

Kemudian dimungkinkan untuk menggunakan kondisi gabungan ini di DQL, yang akan diterjemahkan dengan baik dalam SQL untuk dioptimalkan.

Solusi 3:Tulis fungsi DQL Kustom

Saya menulis fungsi DQL khusus yang diterjemahkan dalam klausa berikut:

SELECT a.*, b.* 
FROM a
   INNER JOIN b ON (a.column <=> b.column) = 1

Sayangnya tidak dapat menghilangkan = 1 bagian dari klausa ini. Ini berhasil, tetapi menyebabkan mayor dampak kinerja pada kueri saya:17 detik vs 0,5 detik, untuk memberikan beberapa indikasi (non-ilmiah).
Jadi saya tidak melangkah lebih jauh ke jalan itu.




  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 menggunakan koneksi persisten mysqli di halaman yang berbeda

  2. Bagaimana cara menghitung semua nilai NULL dalam sebuah tabel?

  3. Pernyataan yang disiapkan PHP\MYSQL

  4. Bagaimana saya bisa menjalankan banyak kueri dalam satu halaman?

  5. Referensi tidak terdefinisi ke perpustakaan MySQL menggunakan g++