Mencari Nilai Pendua dalam Berbilang Lajur
Dalam kod SQL anda, anda berusaha untuk mengenal pasti rekod pendua berdasarkan kriteria tertentu. Untuk mencapai matlamat ini, anda boleh menggunakan gabungan pengumpulan dan penapisan bersyarat.
Contoh yang anda berikan bertujuan untuk mencari rekod pendua yang sepadan dengan kedua-dua lajur nama dan bandar. Walau bagaimanapun, pertanyaan asal anda mempunyai sedikit isu: ia juga termasuk rekod yang hanya nama atau bandar sepadan, dan bukannya memerlukan padanan tepat pada kedua-duanya.
Untuk menyelesaikan isu ini, anda boleh mengubah suai pertanyaan seperti berikut:
SELECT s.id, t.* FROM [stuff] s JOIN ( SELECT name, city, COUNT(*) AS qty FROM [stuff] GROUP BY name, city HAVING COUNT(*) > 1 ) t ON s.name = t.name AND s.city = t.city
Pertanyaan ini menyertai jadual [barangan] dengan subkueri yang mengira kiraan rekod pendua untuk setiap pasangan unik nama dan bandar nilai. Dengan menetapkan klausa HAVING untuk hanya memasukkan kumpulan dengan kiraan lebih daripada 1, anda boleh mengehadkan keputusan kepada baris yang mewakili pendua sebenar.
Output pertanyaan ini harus sepadan dengan hasil yang anda inginkan:
id | name | city |
---|---|---|
904834 | jim | London |
904835 | jim | London |
90145 | Fred | Paris |
90132 | Fred | Paris |
90133 | Fred | Paris |
Atas ialah kandungan terperinci Bagaimana untuk Mencari Rekod Pendua Tepat Merentasi Pelbagai Lajur dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!