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;
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;
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;
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!