Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 14609|Jawab: 0

[Kiat] SQL Cara mengkueri tabel untuk menghapus duplikat

[Salin tautan]
Diposting pada 09/10/2014 11.03.04 | | |

Kueri tunggal/multi-tabel SQL menghapus catatan duplikat

Tabel tunggal berbeda

  1. 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!!






Mantan:SQL membuat prosedur tersimpan dengan parameter
Depan:Pembaca EPUBReader, yang harus dimiliki untuk membuka file EPUB
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com