Rumah > Artikel > pangkalan data > Mengapakah \"SELECT DISTINCT\" Gagal Dengan Pelbagai Medan dalam MySQL?
Pengoptimuman Mysql: Memahami Had "SELECT DISTINCT"
Dalam MYSQL, klausa "SELECT DISTINCT" digunakan untuk menghapuskan baris pendua berdasarkan nilai lajur yang ditentukan. Walau bagaimanapun, ia mempunyai sekatan tertentu yang boleh dihadapi apabila cuba memilih berbilang medan.
Masalah:
Apabila menggunakan "SELECT DISTINCT" diikuti dengan senarai dipisahkan koma medan dan klausa "DISTINCT" yang lain, seperti yang ditunjukkan dalam contoh berikut, ralat berlaku:
mysql_query("SELECT *, DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
Penjelasan:
Tidak seperti fungsi yang digunakan untuk individu lajur, "DISTINCT" ialah pengubah suai pertanyaan yang mempengaruhi semua lajur dalam senarai pilih. Ia mengalih keluar pendua hanya apabila semua lajur dalam pemilihan mempunyai nilai yang sama.
Oleh itu, pertanyaan cuba untuk mengeluarkan baris yang berbeza berdasarkan semua lajur, termasuk yang dinyatakan dalam senarai yang dipisahkan koma dan "id_tiket." Ini mewujudkan kesamaran, kerana tidak jelas lajur mana yang harus dipertimbangkan untuk keunikan.
Penyelesaian:
Untuk memilih semua medan dan menghapuskan pendua berdasarkan "ticket_id," sintaks yang betul ialah:
SELECT DISTINCT *, ticket_id FROM temp_tickets ORDER BY ticket_id
Pertanyaan ini akan mengalih keluar pendua berdasarkan nilai gabungan semua lajur, termasuk "ticket_id." Walau bagaimanapun, ia masih hanya akan memaparkan entri terkini untuk setiap nilai "ticket_id" yang unik. Untuk mendapatkan hanya entri terkini untuk semua lajur, subkueri boleh digunakan untuk memilih ticket_id maksimum bagi setiap nilai "ticket_id" yang berbeza, seperti berikut:
SELECT * FROM temp_tickets WHERE ticket_id IN (SELECT MAX(ticket_id) FROM temp_tickets GROUP BY ticket_id)
Atas ialah kandungan terperinci Mengapakah \"SELECT DISTINCT\" Gagal Dengan Pelbagai Medan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!