Lebih
Menemukan nilai duplikat dalam sebuah tabel SQL
It's mudah untuk menemukan duplikat dengan satu bidang:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Jadi jika kita memiliki sebuah tabel
ID NAME EMAIL
1 John asd@asd.com
2 Sam asd@asd.com
3 Tom asd@asd.com
4 Bob bob@asd.com
5 Tom asd@asd.com
Query ini akan memberikan kita John, Sam, Tom, Tom karena mereka semua sama-sama email
.
Namun, apa yang saya inginkan adalah untuk mendapatkan duplikat dengan sama email
dan nama
.
Artinya, saya ingin mendapatkan "Tom", "Tom".
Alasan saya perlu ini: saya membuat kesalahan, dan diizinkan untuk menyisipkan duplikat nama
dan email
nilai-nilai. Sekarang saya perlu untuk menghapus/mengubah duplikat, jadi saya perlu menemukan mereka terlebih dahulu.
1777
29
Hanya kelompok pada kedua kolom.
Catatan: yang lebih tua ANSI standar ini untuk memiliki semua non-agregat kolom dalam KELOMPOK DENGAN tetapi hal ini telah berubah dengan ide "ketergantungan fungsional":
Dukungan tidak konsisten:
sql_mode=only_full_group_by
:coba ini:
OUTPUT:
jika anda ingin Id dups gunakan ini:
OUTPUT:
untuk menghapus duplikat coba:
OUTPUT:
Coba ini:
Jika anda ingin menghapus duplikat, di sini's cara yang lebih sederhana untuk melakukan itu daripada harus menemukan genap/ganjil baris ke tiga sub-pilih:
Dan untuk menghapus:
Jauh lebih mudah untuk membaca dan memahami IMHO
Catatan: Satu-satunya masalah adalah bahwa anda harus mengeksekusi permintaan tersebut sampai tidak ada baris yang dihapus, karena anda hanya menghapus 1 dari masing-masing menduplikasi setiap waktu
Coba yang berikut ini:
Sedikit terlambat ke pesta tapi saya menemukan yang benar-benar keren pemecahan masalah untuk menemukan semua duplikat Id:
coba kode ini
Ini memilih/menghapus semua duplikat catatan kecuali satu record dari masing-masing kelompok duplikat. Jadi, menghapus daun semua catatan unik + satu record dari masing-masing kelompok duplikat.
Pilih duplikat:
Menghapus duplikat:
Diketahui jumlah yang lebih besar dari catatan, hal ini dapat menyebabkan masalah kinerja.
Dalam kasus anda bekerja dengan Oracle, dengan cara ini akan lebih baik:
Jika anda ingin melihat apakah ada duplikat dalam tabel anda, saya menggunakan Query di bawah ini:
Ini adalah hal yang mudah yang saya've datang dengan. Menggunakan ekspresi meja yang umum (CTE) dan partisi jendela (saya pikir fitur ini di SQL 2008 dan kemudian).
Contoh ini menemukan semua mahasiswa dengan nama duplikat dan dob. Bidang yang anda ingin memeriksa duplikasi pergi di ATAS klausa. Anda dapat mencakup bidang-bidang lain yang anda inginkan dalam proyeksi.
Dengan Menggunakan CTE juga kita dapat menemukan nilai duplikat seperti ini
Bagaimana kita bisa menghitung digandakan nilai-nilai?? entah itu berulang 2 kali atau lebih besar dari 2. hitung saja, bukan kelompok yang bijaksana.
sesederhana
SELECT id, COUNT(id) FROM table1 GROUP BY id MEMILIKI COUNT(id)>1;
Saya pikir ini akan bekerja dengan baik untuk pencarian berulang-nilai dalam kolom tertentu.
Ini juga harus bekerja, mungkin memberikan ini mencoba.
Terutama baik dalam kasus anda Jika anda mencari duplikat yang memiliki beberapa jenis awalan atau umum perubahan, seperti misalnya domain baru di mail. kemudian anda dapat menggunakan replace() pada kolom ini