Menterjemah DISTINCT ON Queries Postgresql kepada MySQL
Memindahkan daripada Postgresql ke MySQL selalunya memerlukan penyesuaian pertanyaan sedia ada. Satu jenis pertanyaan sedemikian ialah pertanyaan DISTINCT ON, yang mendapatkan semula baris unik sambil mempertimbangkan berbilang lajur. Walaupun MySQL tidak mempunyai persamaan yang tepat, terdapat pendekatan untuk mencapai kefungsian yang serupa.
PILIHAN DISTINCT ON Postgresql
Pertanyaan SELECT DISTINCT ON Postgresql mendapatkan semula baris yang berbeza berdasarkan lajur yang ditentukan. Contohnya:
SELECT DISTINCT ON (col1, col2, col3) col4, col5 FROM tablename
Pertanyaan ini hanya mengembalikan satu baris untuk setiap gabungan unik (col1, col2, col3), mengekalkan nilai col4 dan col5 yang pertama ditemui.
MySQL's Kumpulan Mengikut Sambungan
MySQL memanjangkan klausa GROUP BY untuk membenarkan pemilihan lajur bukan agregat. Walau bagaimanapun, baris khusus yang dikembalikan untuk setiap kumpulan adalah tidak pasti. Ini bermakna pertanyaan seperti:
SELECT col4, col5 FROM tablename GROUP BY col1, col2, col3
sama dengan pertanyaan DISTINCT ON Postgresql dari segi pemilihan baris. Walau bagaimanapun, baris yang dikembalikan tidak boleh diramalkan.
Menyesuaikan diri dengan MySQL
Untuk memastikan kebolehramalan, pendekatan yang teratur diperlukan. Walaupun terdapat tarikan menggunakan subkueri dengan ORDER BY, pengoptimum MySQL mungkin tidak menghormatinya.
Pendekatan yang lebih dipercayai ialah:
SELECT t1.col4, t1.col5 FROM tablename t1 INNER JOIN ( SELECT col1, col2, col3, MIN(col4) as m_col4 FROM tablename GROUP BY col1, col2, col3 ) s ON t1.col1=s.col1 AND t1.col2=s.col2 AND t1.col3=s.col3 AND t1.col4=s.m_col4 GROUP BY t1.col1, t1.col2, t1.col3, t1.col4
Pertanyaan ini mendapati baris pertama yang ditemui memenuhi DISTINCT ON kriteria dalam Postgresql dengan menggunakan subkueri berkorelasi untuk mendapatkan nilai col4 minimum bagi setiap satu kumpulan.
Kesimpulan
Walaupun pertanyaan DISTINCT ON Postgresql tidak mempunyai rakan langsung dalam MySQL, terdapat penyelesaian. Pilihan pendekatan bergantung pada pertanyaan khusus dan tahap kerumitan yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Fungsi DISTINCT ON Postgresql dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!