Cara Mudah Menghapus Baris Duplikat dari Tabel SQL Server

Membersihkan basis data Anda sangat penting untuk menjaga kualitas data, terutama ketika berhubungan dengan baris duplikat. Jika Anda bekerja dengan tabel SQL Server besar—misalnya, lebih dari 300.000 baris—Anda mungkin akan menemui duplikat yang ingin Anda hapus. Dalam posting blog ini, kami akan memandu Anda melalui proses yang sederhana untuk secara efektif menghilangkan duplikat sambil menjaga data yang relevan tetap utuh.

Memahami Masalah

Ketika Anda memiliki tabel seperti MyTable, yang mencakup kunci utama dengan kolom identitas (RowID), duplikat mungkin tidak muncul sebagai kecocokan sempurna. Sebaliknya, mereka mungkin bervariasi di satu atau lebih kolom non-kunci, seperti Col1, Col2, dan Col3. Penting untuk mengidentifikasi duplikat ini dengan bijak untuk menghindari kehilangan data sambil memastikan integritas tabel Anda.

Struktur Contoh MyTable

RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null

Penjelasan Solusi

Untuk secara efektif menghapus baris duplikat sambil menjaga satu yang relevan, Anda dapat memanfaatkan pernyataan GROUP BY dan perintah DELETE di SQL Server. Di bawah ini adalah langkah-langkah yang diuraikan untuk kejelasan.

Panduan Langkah-Demi-Langkah

1. Mengelompokkan dan Memilih Baris Unik

Langkah pertama adalah mengelompokkan baris berdasarkan kolom yang ingin Anda periksa untuk duplikat. Dalam hal ini, Col1, Col2, dan Col3. Anda akan menggunakan fungsi MIN untuk menemukan RowID terkecil untuk setiap kelompok duplikat, yang akan memandu Anda tentang baris mana yang harus disimpan.

Berikut adalah bagaimana kode SQL mungkin terlihat:

SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
FROM MyTable 
GROUP BY Col1, Col2, Col3

2. Menghapus Duplikat

Setelah Anda mengidentifikasi baris mana yang harus disimpan, langkah berikutnya adalah menghapus semua yang tidak memiliki pasangan dalam set KeepRows yang baru Anda buat. Berikut adalah kode SQL untuk melakukan penghapusan:

DELETE FROM MyTable
LEFT OUTER JOIN (
   SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
   FROM MyTable 
   GROUP BY Col1, Col2, Col3
) as KeepRows ON
   MyTable.RowId = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL

Perintah ini melakukan hal berikut:

  • Melakukan LEFT OUTER JOIN antara MyTable dan KeepRows yang dihitung.
  • Setiap baris di MyTable yang tidak cocok dengan RowId di KeepRows akan dihapus.

Menangani Identifikasi Unik

Jika tabel Anda mencakup GUID alih-alih integer untuk identifikasi baris, cukup sesuaikan pilihan MIN Anda. Ganti:

MIN(RowId)

Dengan:

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))

Ini memastikan Anda mengidentifikasi GUID terkecil dengan benar sambil menjaga integritas tipe data.

Kesimpulan

Menghapus baris duplikat dari SQL Server dapat dilakukan secara efisien menggunakan GROUP BY dan teknik penggabungan serta penghapusan yang terkait. Dengan mengikuti langkah-langkah ini, Anda dapat menjaga basis data yang bersih dan berfungsi tanpa risiko kehilangan data penting. Selalu ingat untuk mencadangkan basis data Anda sebelum melakukan penghapusan massal demi keamanan!

Dengan pengetahuan yang Anda peroleh di sini, Anda dapat dengan percaya diri menangani masalah duplikat dalam tabel SQL Anda. Selamat melakukan kueri!