Umumnya, praktik terbaik adalah menempatkan batasan unik pada tabel untuk mencegah baris duplikat. Namun, Anda mungkin menemukan diri Anda bekerja dengan database di mana baris duplikat telah dibuat melalui kesalahan manusia, bug di aplikasi Anda, atau data yang tidak bersih dari sumber eksternal. Tutorial ini akan mengajari Anda cara menemukan baris duplikat ini.
Untuk mengikuti, Anda memerlukan akses baca ke database Anda dan alat untuk mengkueri database Anda.
Identifikasi Kriteria Duplikat
Langkah pertama adalah menentukan kriteria Anda untuk baris duplikat. Apakah Anda memerlukan kombinasi dua kolom untuk menjadi unik bersama-sama, atau apakah Anda hanya mencari duplikat dalam satu kolom? Dalam contoh ini, kami mencari duplikat di dua kolom di tabel Pengguna kami:nama pengguna dan email.
Tulis Kueri untuk Memverifikasi Duplikat Ada
Kueri pertama yang akan kita tulis adalah kueri sederhana untuk memverifikasi apakah duplikat memang ada dalam tabel. Untuk contoh kami, kueri saya terlihat seperti ini:
SELECT username, email, COUNT(*)
FROM users
GROUP BY username, email
HAVING COUNT(*) > 1
HAVING
penting di sini karena tidak seperti WHERE
, HAVING
filter pada fungsi agregat.
Jika ada baris yang dikembalikan, itu berarti kami memiliki duplikat. Dalam contoh ini, hasil kami terlihat seperti ini:
Mencantumkan Semua Baris yang Mengandung Duplikat
Pada langkah sebelumnya, kueri kami mengembalikan daftar duplikat. Sekarang, kita ingin mengembalikan seluruh record untuk setiap baris duplikat.
Untuk mencapai ini, kita harus memilih seluruh tabel dan menggabungkannya ke baris duplikat kita. Permintaan kami terlihat seperti ini:
SELECT a.*
FROM users a
JOIN (SELECT username, email, COUNT(*)
FROM users
GROUP BY username, email
HAVING count(*) > 1 ) b
ON a.username = b.username
AND a.email = b.email
ORDER BY a.email
Jika Anda perhatikan lebih dekat, Anda akan melihat bahwa kueri ini tidak terlalu rumit. SELECT
initial awal cukup pilih setiap kolom dalam tabel pengguna, lalu gabungkan bagian dalam dengan tabel data duplikat dari kueri awal kami. Karena kita menggabungkan tabel dengan tabel itu sendiri, maka perlu menggunakan alias (di sini, kita menggunakan a dan b) untuk memberi label pada kedua versi.
Berikut adalah tampilan hasil kami untuk kueri ini:
Karena kumpulan hasil ini mencakup semua id baris, kami dapat menggunakannya untuk membantu kami menghapus duplikat baris nanti.