Bagaimana untuk Mencapai Fungsi DISTINCT ON Postgresql dalam MySQL?

Patricia Arquette
Lepaskan: 2024-11-10 22:56:03
asal
173 orang telah melayarinya

How to Achieve the Functionality of Postgresql's DISTINCT ON in MySQL?

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan