Saya memiliki database organisasi SQL Server, dan ada banyak baris duplikat. Saya ingin menjalankan pernyataan pilih untuk mengambil semua ini dan jumlah dupes, tetapi juga mengembalikan id yang terkait dengan masing-masing organisasi.
Pernyataan seperti:
SELECT orgName, COUNT(*) AS dupes
FROM organizations
GROUP BY orgName
HAVING (COUNT(*) > 1)
Akan mengembalikan sesuatu seperti
orgName | dupes
ABC Corp | 7
Foo Federation | 5
Widget Company | 2
Tapi saya juga ingin mengambil ID mereka. Apakah ada cara untuk melakukan ini? Mungkin seperti a
orgName | dupeCount | id
ABC Corp | 1 | 34
ABC Corp | 2 | 5
...
Widget Company | 1 | 10
Widget Company | 2 | 2
Alasannya adalah bahwa ada juga tabel terpisah dari pengguna yang menautkan ke organisasi-organisasi ini, dan saya ingin menyatukan mereka (oleh karena itu hapus dupes sehingga pengguna menautkan ke organisasi yang sama dan bukan org dupe). Tapi saya ingin berpisah secara manual sehingga saya tidak mengacaukan apa pun, tetapi saya masih membutuhkan pernyataan yang mengembalikan ID dari semua dupe orgs sehingga saya bisa melihat daftar pengguna.
sumber
isnull()
untuk kolom yang dapat dibatalkan padaon
bagianAnda dapat menjalankan kueri berikut dan menemukan duplikat dengan
max(id)
dan menghapus baris itu.Tetapi Anda harus menjalankan kueri ini beberapa kali.
sumber
MAX( COUNT(*) ) - 1
waktu, yang mungkin masih layak.Anda dapat melakukannya seperti ini:
Jika Anda ingin mengembalikan hanya catatan yang dapat dihapus (meninggalkan masing-masing), Anda dapat menggunakan:
Sunting: SQL Server 2000 tidak memiliki fungsi ROW_NUMBER (). Sebagai gantinya, Anda dapat menggunakan:
sumber
Solusi yang ditandai sebagai benar tidak berfungsi untuk saya, tetapi saya menemukan jawaban ini sangat bagus: Dapatkan daftar baris duplikat di MySql
sumber
n1.id > n2.id
akan mencegah setiap pasangan muncul dua kali.Anda dapat mencoba ini, yang terbaik untuk Anda
sumber
Jika Anda ingin menghapus duplikat:
sumber
Untuk menemukan duplikat Rekam 1) Menggunakan CTE
2) Dengan Menggunakan GroupBy
sumber
Jadi catatan dengan rowum> 1 akan menjadi rekaman duplikat di tabel Anda. 'Partisi oleh' kelompok pertama oleh catatan dan kemudian membuat cerita bersambung dengan memberi mereka nomor seri. Jadi rownum> 1 akan menjadi duplikat catatan yang bisa dihapus.
sumber
Src: https://stackoverflow.com/a/59242/1465252
sumber
sumber
sumber
Anda memiliki beberapa cara untuk Pilih
duplicate rows
.untuk solusi saya, pertimbangkan dulu tabel ini sebagai contoh
Solusi pertama:
Solusi kedua: Gunakan
identity
bidangdan akhir semua solusi gunakan perintah ini
sumber
saya pikir saya tahu apa yang Anda butuhkan saya perlu mencampur antara jawaban dan saya pikir saya mendapatkan solusi yang ia inginkan:
memiliki max id akan memberi Anda id dari dublicate dan yang asli yang ia minta:
hanya hal menyedihkan yang Anda keluarkan dalam formulir ini
semoga tetap membantu
sumber
Misalkan kita memiliki tabel 'Siswa' tabel dengan 2 kolom:
student_id int
student_name varchar
Sekarang kami ingin melihat rekaman duplikat. Gunakan kueri ini:
sumber
Saya mendapat opsi yang lebih baik untuk mendapatkan rekaman duplikat di tabel
Hasil kueri di atas menunjukkan semua nama duplikat dengan id siswa yang unik dan jumlah kejadian duplikat
Klik di sini untuk melihat hasil dari sql
sumber
sumber
Saya menggunakan dua metode untuk menemukan baris duplikat. Metode 1 adalah yang paling terkenal menggunakan grup oleh dan memiliki. Metode 2 menggunakan CTE - Common Table Expression .
Seperti yang disebutkan oleh @RedFilter cara ini juga benar. Banyak kali saya menemukan metode CTE juga berguna bagi saya.
Dalam contoh di atas, kami mengumpulkan hasilnya dengan menemukan kejadian berulang menggunakan ROW_NUMBER dan PARTITION BY. Kemudian kami menerapkan mana klausa untuk memilih hanya baris yang pada hitung ulang lebih dari 1. Semua hasilnya dikumpulkan tabel CTE dan bergabung dengan tabel Organisasi.
Sumber: CodoBee
sumber
Mencoba
sumber