Rumah > Artikel > pangkalan data > Bagaimana untuk Meniru PostgreSQL's SELECT DISTINCT ON Functionality dalam MySQL?
POSTGRESQL KE MYSQL: Menukar SELECT DISTINCT ON Queries
Menavigasi migrasi pangkalan data boleh menjadi mencabar, terutamanya apabila beralih daripada PostgreSQL ke MySQL. Satu binaan pertanyaan biasa, SELECT DISTINCT ON, menimbulkan persoalan tentang rakan sejawat MySQLnya.
Postgresql SELECT DISTINCT ON
Dalam PostgreSQL, SELECT DISTINCT ON membenarkan penghapusan pendua baris berdasarkan ungkapan yang ditentukan (col1, col2, col3) sambil mengekalkan baris "pertama" untuk setiap set unik. Sebagai contoh, jika jadual mengandungi baris pendua:
col1 | col2 | col3 | col4 | col5 -------------------------------- 1 | 2 | 3 | 777 | 888 1 | 2 | 3 | 888 | 999 3 | 3 | 3 | 555 | 555
Pertanyaan SELECT DISTINCT ON (col1, col2, col3) col4, col5 FROM tablename akan kembali:
col4 | col5 ----------- 777 | 888 555 | 555
Pilihan baris "pertama" tidak dapat diramalkan tanpa menyatakan klausa ORDER BY.
Pelanjutan MySQL kepada GROUP BY
MySQL melanjutkan penggunaan GROUP BY, membenarkan pemilihan daripada lajur bukan teragregat yang tidak dinamakan secara eksplisit dalam klausa GROUP BY. Walau bagaimanapun, pilihan nilai pelayan daripada setiap kumpulan adalah sewenang-wenangnya, mengakibatkan nilai yang tidak dapat diramalkan dalam output pertanyaan.
Menukar kepada MySQL
MySQL tidak mempunyai persamaan yang tepat dengan PostgreSQL SELECT DISTINCT ON construct. Satu pendekatan untuk meniru fungsinya ialah melalui sambungan MySQL kepada GROUP BY:
SELECT col4, col5 FROM tablename GROUP BY col1, col2, col3
Pertanyaan ini akan mengembalikan baris "pertama" untuk setiap set (col1, col2, col3), serupa dengan pertanyaan PostgreSQL. Walau bagaimanapun, baris yang dikembalikan masih tidak dapat ditentukan kerana ketiadaan pesanan mengikut klausa.
Pemilihan baris "pertama" yang lebih tepat boleh dicapai dengan mengubah suai pertanyaan:
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
Ini pertanyaan secara berkesan mendapatkan semula baris dengan nilai minimum untuk col4 untuk setiap set ekspresi unik (col1, col2, col3), memberikan output yang lebih boleh diramal.
Kesimpulan
Menukar pertanyaan PostgreSQL kepada rakan sejawat MySQL memerlukan analisis kes demi kes. Walaupun persamaan yang tepat mungkin tidak selalu wujud, pelbagai strategi dan penyelesaian menawarkan penyelesaian, daripada yang agak mudah kepada sederhana kompleks, bergantung pada jenis pertanyaan.
Atas ialah kandungan terperinci Bagaimana untuk Meniru PostgreSQL's SELECT DISTINCT ON Functionality dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!