|
Kueri tunggal/multi-tabel SQL menghapus catatan duplikat Tabel tunggal berbeda - select distinct 字段 from 表
Salin kode
Banyak suara dikelompokkan berdasarkan group by harus ditempatkan sebelum memesan oleh dan batasi, jika tidak, kesalahan akan dilaporkan ************************************************************************************ 1. Temukan catatan duplikat yang berlebihan dalam tabel, dan catatan duplikat dinilai berdasarkan satu bidang (peopleId). Pilih * dari orang where peopleId di (pilih peopleId dari grup orang berdasarkan peopleId yang memiliki count(peopleId) > 1) 2. Hapus catatan duplikat yang berlebihan dalam tabel, dan catatan duplikat dinilai berdasarkan satu bidang (peopleId), hanya menyisakan catatan dengan rowid terkecil Hapus dari orang where peopleId di (pilih peopleId dari grup orang berdasarkan peopleId yang memiliki count(peopleId) > 1) dan rowid tidak masuk (pilih min(rowid) dari grup orang berdasarkan peopleId yang memiliki count(peopleId )>1) 3. Temukan catatan duplikat yang berlebihan (beberapa bidang) dalam tabel Pilih * dari Vitae A where (a.peopleId,a.seq) di (pilih peopleId,seq dari grup riwayat hidup berdasarkan peopleId,seq memiliki count(*) > 1) 4. Hapus catatan duplikat yang berlebihan (beberapa bidang) dalam tabel, hanya menyisakan catatan dengan rowid terkecil Hapus dari Vitae A where (a.peopleId,a.seq) di (pilih peopleId,seq dari grup riwayat hidup berdasarkan peopleId,seq memiliki count(*) > 1) dan rowid tidak ada (pilih min(rowid) dari grup vitae berdasarkan peopleId,seq memiliki count(*)>1) 5. Temukan catatan duplikat yang berlebihan (beberapa bidang) dalam tabel, dan tidak berisi catatan dengan rowid paling sedikit Pilih * dari Vitae A where (a.peopleId,a.seq) di (pilih peopleId,seq dari grup riwayat hidup berdasarkan peopleId,seq memiliki count(*) > 1) dan rowid tidak ada (pilih min(rowid) dari grup vitae berdasarkan peopleId,seq memiliki count(*)>1)
(dua) Misalnya Ada bidang "nama" di tabel A, Dan nilai "nama" mungkin sama antara catatan yang berbeda, Sekarang Anda perlu mengkueri item dengan nilai "nama" duplikat di antara catatan dalam tabel; Pilih Nama,Hitungan(*) Dari Grup Berdasarkan Nama Yang Memiliki Jumlah(*) > 1 Jika jenis kelaminnya juga sama, itu adalah sebagai berikut: Pilih Nama,jenis kelamin,Hitungan(*) Dari Grup Berdasarkan Nama,jenis kelamin Memiliki Hitungan(*) > 1 (tiga) Metode 1 deklarasikan bilangan bulat @max,@id bilangan bulat deklarasikan kursor lokal cur_rows untuk pilih bidang utama, count(*) dari grup nama tabel berdasarkan bidang utama yang memiliki count(*) >; 1 Buka cur_rows Ambil cur_rows ke @id,@max sedangkan @@fetch_status=0 mulai Pilih @max = @max -1 Atur jumlah baris @max Hapus dari nama tabel di mana bidang utama = @id Ambil cur_rows ke @id,@max akhir Tutup cur_rows Atur jumlah baris 0 Metode 2 "Catatan duplikat" memiliki dua arti dari catatan duplikat, satu adalah catatan duplikat sepenuhnya, yaitu catatan dengan semua bidang yang diduplikasi, dan yang lainnya adalah catatan dengan bagian duplikat dari bidang kunci, seperti bidang Nama diduplikasi, sedangkan bidang lain belum tentu diduplikasi atau dapat diabaikan. 1. Untuk jenis pengulangan pertama, relatif mudah diselesaikan dan digunakan pilih berbeda * dari tableName Anda bisa mendapatkan kumpulan hasil tanpa catatan duplikat. Jika Anda perlu menghapus catatan duplikat (simpan 1 catatan duplikat), Anda dapat menghapusnya sebagai berikut pilih berbeda * ke dalam #Tmp dari tableName tabel jatuhNama pilih * ke dalam tableName dari #Tmp Drop Table #Tmp Duplikasi ini terjadi karena desain tabel yang buruk dan dapat diselesaikan dengan menambahkan kolom indeks unik. 2. Jenis masalah duplikat ini biasanya mengharuskan catatan pertama dalam catatan duplikat untuk disimpan, dan metode operasinya adalah sebagai berikut Misalkan ada bidang duplikat Nama dan Alamat, dan Anda perlu mendapatkan kumpulan hasil unik untuk kedua bidang ini pilih identitas(int,1,1) sebagai autoID, * ke dalam #Tmp dari tableName pilih min(autoID) sebagai autoID ke dalam #Tmp2 dari grup #Tmp berdasarkan Nama,autoID pilih * dari #Tmp tempat autoID masuk(pilih autoID dari #tmp2) Pilihan terakhir mendapatkan kumpulan hasil Nama dan Alamat yang tidak diulang (tetapi ada bidang autoID tambahan, yang dapat ditulis dalam klausa select saat benar-benar menulis) (4) Kueri diduplikasi Pilih * dari nama tabel tempat ID masuk (pilih ID dari nama tabel Kelompokkan berdasarkan ID memiliki count(id) > 1 ) 3. Temukan catatan duplikat yang berlebihan (beberapa bidang) dalam tabel Pilih * dari Vitae A where (a.peopleId,a.seq) di (pilih peopleId,seq dari grup riwayat hidup berdasarkan peopleId,seq memiliki count(*) > 1) Berjalan akan menyebabkan masalah, dan menulis dan mengirim seperti di mana (a.peopleId, a.seq) tidak akan berfungsi!!
|