MySQL "SELECT DISTINCT" Dilema
Dalam pengurusan pangkalan data MySQL, "SELECT DISTINCT" ialah pengubah suai pertanyaan yang digunakan untuk menghapuskan baris pendua daripada set keputusan. Walau bagaimanapun, isu biasa timbul apabila cuba memilih semua medan dalam jadual bersama-sama dengan nilai yang berbeza.
Pertanyaan SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id hanya berkesan mendapatkan nilai ticket_id yang unik. Walau bagaimanapun, apabila melanjutkan pertanyaan kepada SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id, ralat berlaku disebabkan peletakan "DISTINCT" yang salah.
Sintaks yang Betul
"DISTINCT" mesti diletakkan sejurus selepas "PILIH" dalam pernyataan pertanyaan. Berikut ialah sintaks yang betul:
SELECT DISTINCT ticket_id, OTHER_COLUMN1, OTHER_COLUMN2, ... FROM temp_tickets ORDER BY ticket_id
Dalam sintaks ini, "DISTINCT" digunakan pada semua lajur yang disenaraikan dalam senarai pilihan, termasuk lajur yang digunakan untuk mengisih (ORDER BY). Oleh itu, pertanyaan akan mengembalikan baris yang berbeza untuk setiap gabungan unik nilai dalam lajur yang disenaraikan.
Penjelasan Logik
"DISTINCT" menghapuskan baris pendua jika semua lajur dalam senarai pilih mempunyai nilai yang sama. Ini bermakna jika mana-mana lajur lain mengandungi nilai yang berbeza, baris tersebut akan dianggap unik dan disertakan dalam set hasil.
Dalam sintaks yang salah SELECT foo, DISTINCT ticket_id FROM table..., pertanyaan adalah samar-samar kerana tidak jelas cara menentukan baris mana yang harus dihapuskan. Jika terdapat tiga nilai berbeza untuk ticket_id dan enam nilai berbeza untuk foo, tidak jelas tiga nilai foo yang harus dikeluarkan bersama nilai ticket_id yang berbeza. Dengan meletakkan "DISTINCT" sejurus selepas "SELECT", pertanyaan menjadi jelas dan menghapuskan sebarang kesamaran.
Atas ialah kandungan terperinci Mengapa MySQL \'SELECT DISTINCT\' Menyebabkan Ralat Semasa Memilih Semua Medan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!