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

PILIH sub-kueri dengan kondisi WHERE di Yii2 find() / QueryBuilder

Contoh kueri, dari perspektif SQL menggunakan "subkueri berkorelasi" di dalam klausa pilih dan seringkali ini merupakan cara yang sangat tidak efisien untuk membentuk kueri.

SELECT ParentTable.*, (SELECT MAX(ChildTable.NumberField) 
                       FROM ChildTable
                       WHERE ChildTable.FK_Id = ParentTable.Id)
FROM ParentTable

Meskipun sekilas mungkin tampak lebih kompleks dan karenanya kurang efisien, kinerja umumnya lebih baik untuk menghindari "subquery berkorelasi" dalam klausa pilih dan mengganti menggunakan "tabel turunan" sebagai gantinya, seperti ini:

SELECT ParentTable.*,c.MxNum
FROM ParentTable
LEFT JOIN (
           SELECT ChildTable.FK_Id, MAX(ChildTable.NumberField) as MxNum FROM ChildTable
           GROUP BY ChildTable.FK_Id
           ) AS c ON c.FK_Id = ParentTable.Id

Catatan, subquery yang berkorelasi dengan klausa pilih mungkin mengembalikan NULL, dan karena ini, jika menggantinya dengan tabel turunan, jenis gabungan yang setara adalah LEFT OUTER JOIN (atau hanya LEFT JOIN) karena ini juga memungkinkan hasil NULL. Namun jika Anda tidak membutuhkan NULL untuk kolom, gunakan INNER JOIN yang lebih efisien.

Mohon maaf sebelumnya karena tidak mengetahui sintaks Yii2, tetapi tampaknya relevan untuk mengetahui pendekatan alternatif yang efektif yang dapat membantu memecahkan masalah.



  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 mendapatkan data json dari permintaan posting iphone

  2. Hubungkan beberapa tabel di database yang berbeda? MySql

  3. Dapatkan tanggal pertama dan terakhir bulan depan di MySQL

  4. Bagaimana cara mengambil data dari beberapa tabel menggunakan formulir PHP?

  5. Akses Komentar bidang MySQL dengan PHP