in mySQL

Menghapus duplikat data di mysql

Paling tidak harus punya satu kolom selain ID sebagai kolom unik. Misalnya untuk tabel member adalah kolom username. Maka query-nya seperti ini.

DELETE FROM member WHERE id IN (SELECT * FROM (SELECT id FROM member                     GROUP BY username HAVING (COUNT(*) > 1)) AS A );

catatan: Jika duplikatnya lebih dari 2, maka harus dieksekusi beberapa kali.

update 20-09-2022

ada kalanya hasil ekspor dari mysql dalam jumlah besar memunculkan keajaiban seperti yang saya temui yaitu kolom ID yang duplikat padahal secara logika kan harusnya enggak ya. Mungkin juga karena proses import yang ber-part-part.

Jadi, kondisi di atas mengharuskan ada 2 kolom yang unik (kolom ID dan kolom lain), sedangkan kebetulan data saya tidak ada kolom unik lainnya. untuk mengakalinya adalah dengan menambah kolom dummy dengan asumsi kolom ID belum di-alter menjadi primary.

ALTER TABLE member ADD COLUMN dummy_id BIGINT(20) AUTO_INCREMENT NOT NULL FIRST,  ADD PRIMARY KEY(dummy_id );

Baru dihapus dengan kode di atas,

DELETE FROM member WHERE dummy_id IN (SELECT * FROM (SELECT dummy_id FROM member GROUP BY id HAVING (COUNT(*) > 1) ) AS A );

alternatif lain

DELETE s1 FROM tabel AS s1 INNER JOIN tabel AS s2 WHERE s1.id > s2.id AND s1.username = s2.username AND s1.username <> “” AND s1.username IS NOT NULL

Leave a Reply for agustina Cancel Reply

Write a Comment

Comment

  1. maaf mas numpang tanya, jika ada seuah tabel transaksi.
    dari tabel transaksi, dimana ada 1 user yang memiliki data beli terhadap item x terdata beberapa kali dengan nilai rating dan tanggal pesan yang sama.

    code cara menghapusnya duplikatnya item x pada user tersebut.
    dilakukan untuk semua user yang mengalami kasus yang sama

    • maaf baru balas. mungkin bisa dicoba dengan menambahkan filter, contoh diatas hanya yang memiliki username double
      GROUP BY username HAVING (COUNT(*) > 1),
      bisa ditambahkan kolom lain setelah GROUP BY.

      kalau kasusnya banyak, lebih baik di sisi aplikasi aja dilakukan itenary. Misalnya pakai looping di php dicek per-user dan per-item.