Bagaimana untuk Meniru Postgresql's SELECT DISTINCT ON dalam MySQL?

Barbara Streisand
Lepaskan: 2024-11-08 16:59:02
asal
1054 orang telah melayarinya

How to Replicate Postgresql's SELECT DISTINCT ON in MySQL?

Menukar SELECT DISTINCT ON Postgresql kepada MySQL

Apabila berhijrah dari Postgresql ke MySQL, seseorang mungkin menghadapi keperluan untuk menukar pertanyaan menggunakan SELECT DISTINCT Postgresql ON kenyataan kepada MySQL mereka setara.

PILIH DISTINCT ON Postgresql

Dalam Postgresql, SELECT DISTINCT ON digunakan untuk mengalih keluar baris pendua berdasarkan gabungan unik lajur yang ditentukan. Ia menghapuskan semua baris yang sepadan dan hanya mengekalkan baris "pertama" untuk setiap kombinasi yang berbeza.

Sambungan MySQL ke GROUP BY

MySQL tidak mempunyai rakan sejawat yang tepat untuk SELECT BERBEZA PADA. Sebaliknya, ia menggunakan sambungan kepada GROUP BY yang membenarkan lajur tidak teragregat dipilih walaupun ia tidak dinamakan dalam klausa GROUP BY. Walau bagaimanapun, pilihan nilai dari setiap kumpulan tidak dapat diramalkan. Oleh itu, kami berpotensi menggunakan GROUP BY dalam MySQL untuk mencapai kesan yang sama:

SELECT col4, col5
FROM tablename
GROUP BY col1, col2, col3;
Salin selepas log masuk

Pertanyaan ini akan mengembalikan baris "pertama" untuk setiap gabungan (col1, col2, col3), tetapi susunan khusus bagi baris ini tidak tentu.

Mengekalkan Susunan Baris

Kepada nyatakan susunan baris yang dikembalikan, kita boleh menggunakan subquery:

SELECT col4, col5
FROM (
  SELECT col1, col2, col3, col4, col5
  FROM tablename
  ORDER BY col1, col2, col3, col4
) s
GROUP BY col1, col2, col3;
Salin selepas log masuk

Walaupun pendekatan ini kelihatan logik, MySQL masih mempunyai budi bicara untuk memilih sebarang nilai untuk col4 dan col5. Untuk memastikan susunan baris yang dijangkakan, kami memerlukan pertanyaan yang lebih kompleks:

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

Kesimpulan

Walaupun tiada terjemahan langsung Postgresql's SELECT DISTINCT ON ke MySQL, penyelesaian menggunakan GROUP BY dan subqueries menyediakan fungsi yang diingini. Walau bagaimanapun, pertanyaan MySQL yang terhasil mungkin lebih kompleks daripada rakan sejawat Postgresql mereka.

Atas ialah kandungan terperinci Bagaimana untuk Meniru Postgresql's SELECT DISTINCT ON 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