Menukar DISTINCT ON Queries daripada PostgreSQL kepada MySQL
Dalam peralihan daripada PostgreSQL kepada MySQL, pengguna mungkin menghadapi perbezaan dalam sintaks untuk menghapuskan baris pendua berdasarkan nilai lajur tertentu. PostgreSQL menggunakan pernyataan SELECT DISTINCT ON, manakala MySQL menggunakan sambungan klausa GROUP BY.
PILIH DISTINCT ON PostgreSQL
PILIH DISTINCT ON (col1, col2, col3) dalam PostgreSQL mengekalkan baris kelayakan pertama untuk setiap gabungan unik lajur yang ditentukan. Sebagai contoh, pertimbangkan jadual berikut:
col1 | col2 | col3 | col4 | col5 |
---|---|---|---|---|
1 | 2 | 3 | 777 | 888 |
1 | 2 | 3 | 888 | 999 |
3 | 3 | 3 | 555 | 555 |
Pertanyaan akan mengeluarkan:
col4 | col5 |
---|---|
777 | 888 |
555 | 555 |
Pelanjutan MySQL ke GROUP BY
Pelanjutan MySQL membenarkan pemilihan lajur tidak teragregat walaupun ia tidak disertakan dalam klausa GROUP BY. Walau bagaimanapun, pelayan mempunyai kebebasan untuk memilih nilai arbitrari daripada lajur ini untuk setiap kumpulan.
Pertanyaan MySQL Setara
Pertanyaan MySQL yang setara untuk contoh PostgreSQL ialah:
SELECT col4, col5 FROM tablename GROUP BY col1, col2, col3;
Kedua-dua PostgreSQL dan MySQL akan mengembalikan satu baris untuk setiap satu (col1, gabungan col2, col3), tetapi baris khusus yang dikembalikan mungkin berbeza kerana kekurangan pesanan yang jelas.
Penyelesaian untuk Pertanyaan Tertib
Untuk meniru pesanan PostgreSQL DISTINCT ON tingkah laku, pertanyaan yang lebih kompleks dalam MySQL ialah diperlukan:
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 MySQL tidak mempunyai rakan sejawat yang tepat untuk SELECT DISTINCT ON Postgresql, penyelesaian yang melibatkan sambungan GROUP BY boleh menyediakan kefungsian yang serupa. Kerumitan penyelesaian mungkin berbeza-beza bergantung pada keperluan pertanyaan.
Atas ialah kandungan terperinci Bagaimana untuk Menukar SELECT DISTINCT ON PostgreSQL ON Queries kepada MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!