Sangat mudah untuk menemukan duplikat dengan satu bidang:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Jadi kalau kita punya meja
ID NAME EMAIL
1 John [email protected]
2 Sam [email protected]
3 Tom [email protected]
4 Bob [email protected]
5 Tom [email protected]
Permintaan ini akan memberi kita John, Sam, Tom, Tom karena mereka semua memiliki yang sama email
.
Namun, yang saya inginkan adalah mendapatkan duplikat dengan yang sama email
dan name
.
Artinya, saya ingin mendapatkan "Tom", "Tom".
Alasan saya membutuhkan ini: Saya membuat kesalahan, dan diizinkan untuk memasukkan nilai duplikat name
dan email
. Sekarang saya perlu menghapus / mengubah duplikat, jadi saya harus menemukannya terlebih dahulu.
sql
duplicates
Alex
sumber
sumber
name
bidang di SELECT.Jawaban:
Cukup kelompokkan pada kedua kolom.
Catatan: standar ANSI yang lebih lama adalah memiliki semua kolom yang tidak diagregasi dalam GROUP BY tetapi ini telah berubah dengan gagasan "ketergantungan fungsional" :
Dukungan tidak konsisten:
sql_mode=only_full_group_by
:sumber
>1
=1
coba ini:
KELUARAN:
jika Anda ingin ID dari dups gunakan ini:
KELUARAN:
untuk menghapus duplikat coba:
KELUARAN:
sumber
Coba ini:
sumber
Jika Anda ingin menghapus duplikat, berikut ini cara yang lebih sederhana untuk melakukannya daripada harus menemukan baris genap / ganjil ke dalam tiga sub-pilih:
Dan untuk menghapus:
Jauh lebih mudah untuk membaca dan memahami IMHO
Catatan: Satu-satunya masalah adalah Anda harus mengeksekusi permintaan sampai tidak ada baris yang dihapus, karena Anda hanya menghapus 1 dari setiap duplikat setiap kali
sumber
You can't specify target table 'users' for update in FROM clause
Coba yang berikut ini:
sumber
sumber
Sedikit terlambat ke pesta tetapi saya menemukan solusi yang sangat keren untuk menemukan semua duplikat ID:
sumber
GROUP_CONCAT
akan berhenti setelah beberapa panjang yang telah ditentukan, sehingga Anda mungkin tidak mendapatkan semuaid
.coba kode ini
sumber
Ini memilih / menghapus semua rekaman duplikat kecuali satu catatan dari setiap kelompok duplikat. Jadi, penghapusan membuat semua catatan unik + satu catatan dari setiap grup duplikat.
Pilih duplikat:
Hapus duplikat:
Waspadai jumlah catatan yang lebih besar, ini dapat menyebabkan masalah kinerja.
sumber
Jika Anda bekerja dengan Oracle, cara ini lebih disukai:
sumber
sumber
Jika Anda ingin melihat apakah ada baris duplikat di tabel Anda, saya menggunakan Query di bawah ini:
sumber
Ini adalah hal mudah yang saya buat. Ini menggunakan ekspresi tabel umum (CTE) dan jendela partisi (saya pikir fitur ini ada di SQL 2008 dan yang lebih baru).
Contoh ini menemukan semua siswa dengan nama duplikat dan dob. Kolom yang ingin Anda periksa duplikatnya masuk dalam klausa OVER. Anda dapat memasukkan bidang lain yang Anda inginkan dalam proyeksi.
sumber
sumber
Bagaimana kita bisa menghitung nilai duplikat ?? baik itu diulang 2 kali atau lebih besar dari 2. hitung saja, bukan kelompok bijaksana.
sesederhana
sumber
Dengan Menggunakan CTE juga kita dapat menemukan nilai duplikat seperti ini
sumber
sumber
SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;
Saya pikir ini akan berfungsi dengan baik untuk mencari nilai yang berulang di kolom tertentu.
sumber
sumber
Ini juga harus bekerja, mungkin mencobanya.
Sangat baik dalam kasus Anda Jika Anda mencari duplikat yang memiliki semacam awalan atau perubahan umum seperti misalnya domain baru dalam surat. maka Anda dapat menggunakan ganti () di kolom ini
sumber
Jika Anda ingin menemukan data duplikat (oleh satu atau beberapa kriteria) dan pilih baris yang sebenarnya.
http://developer.azurewebsites.net/2014/09/better-sql-group-by-find-duplicate-data/
sumber
sumber
COUNT
tanpaGROUP BY
, kecuali itu mengacu pada seluruh tabel.Untuk menghapus catatan yang namanya duplikat
sumber
Untuk Memeriksa Dari Rekam rangkap dalam tabel.
atau
Untuk menghapus catatan duplikat dalam sebuah tabel.
atau
sumber
SELECT column_name,COUNT(*) FROM TABLE_NAME GROUP BY column1, HAVING COUNT(*) > 1;
sumber
Kita dapat menggunakan memiliki di sini yang berfungsi pada fungsi agregat seperti yang ditunjukkan di bawah ini
Di sini sebagai dua bidang, id_account dan data digunakan dengan Count (*). Jadi, itu akan memberikan semua catatan yang memiliki nilai lebih dari satu kali sama di kedua kolom.
Kami beberapa alasan keliru kami telah gagal untuk menambahkan kendala dalam tabel SQL server dan catatan telah dimasukkan duplikat di semua kolom dengan aplikasi front-end. Kemudian kita bisa menggunakan kueri di bawah ini untuk menghapus kueri duplikat dari tabel.
Di sini kami telah mengambil semua catatan berbeda dari tabel orignal dan menghapus catatan dari tabel asli. Sekali lagi kami memasukkan semua nilai berbeda dari tabel baru ke tabel asli dan kemudian menghapus tabel baru.
sumber
Anda mungkin ingin mencoba ini
sumber
Yang paling penting di sini adalah memiliki fungsi tercepat. Indeks duplikat juga harus diidentifikasi. Bergabung sendiri adalah pilihan yang baik tetapi untuk memiliki fungsi yang lebih cepat lebih baik untuk pertama kali menemukan baris yang memiliki duplikat dan kemudian bergabung dengan tabel asli untuk menemukan id dari baris yang digandakan. Terakhir, pesanlah dengan kolom apa pun kecuali id untuk menduplikasi baris di dekat satu sama lain.
sumber
Anda dapat menggunakan kata kunci SELECT DISTINCT untuk menghilangkan duplikat. Anda juga bisa memfilter menurut nama dan membuat semua orang dengan nama itu di atas meja.
sumber
Kode pastinya akan berbeda tergantung pada apakah Anda ingin menemukan baris duplikat juga atau hanya id yang berbeda dengan email dan nama yang sama. Jika id adalah kunci utama atau memiliki kendala unik, perbedaan ini tidak ada, tetapi pertanyaannya tidak menentukan ini. Dalam kasus sebelumnya, Anda dapat menggunakan kode yang diberikan dalam beberapa jawaban lain:
Dalam kasus terakhir Anda akan menggunakan:
sumber