Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Hapus Duplikat Catatan

Terkadang Anda mungkin perlu menghapus catatan duplikat atau menghapus baris duplikat di MySQL. Ada 3 cara utama untuk menghapus catatan duplikat di MySQL. Berikut cara menghapus data duplikat di MySQL.

MySQL Menghapus Data Duplikat

Berikut adalah langkah-langkah untuk menghapus duplikat record di MySQL. Katakanlah Anda memiliki tabel berikut dup_orders(id, jumlah) dengan catatan duplikat.

mysql> create table dup_orders(id int, amount int);

mysql> insert into dup_orders(id,amount) values(1, 100),(1,250),(2,350),(2,350);

mysql> select * from dup_orders;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    1 |    250 |
|    2 |    350 |
|    2 |    350 |
+------+--------+

Bonus Baca :Cara Mendapatkan Duplikat Record di MySQL

Cara Menghapus Baris Duplikat di MySQL

Mari kita lihat masing-masing dari 3 cara untuk menghapus catatan duplikat di MySQL.

1. Hapus rekaman duplikat menggunakan tabel perantara

Metode ini melibatkan 3 langkah. Pertama, pilih baris tanpa duplikat, dari dup_orders tabel dan memasukkannya ke tabel lain. Berikut sintaksnya.

CREATE TABLE [copy_of_source] SELECT DISTINCT [columns] FROM [source_table];

Berikut kueri kami untuk memilih baris berbeda dari dup_orders ke tabel lain.

mysql> CREATE TABLE dup_orders_copy SELECT DISTINCT id,amount FROM dup_orders;

mysql> select * from dup_orders_copy;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    1 |    250 |
|    2 |    350 |
+------+--------+

Kueri di atas menghapus baris yang melengkapi duplikat, yaitu nilai duplikat untuk semua kolom.

Jika Anda ingin menghapus baris dengan nilai duplikat hanya untuk satu atau lebih tetapi tidak semua kolom, Anda dapat menggunakan klausa GROUP BY dalam kueri di atas. Misalnya, jika Anda hanya ingin baris dengan nilai kolom ID duplikat di tabel Anda, gunakan kueri berikut.

mysql> CREATE TABLE dup_orders_copy SELECT id,amount FROM dup_orders group by id;

mysql> select * from dup_orders_copy;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    350 |
+------+--------+

Setelah Anda membuat tabel perantara, jatuhkan tabel aslinya.

mysql> drop table dup_orders;

Terakhir, ganti nama tabel perantara menjadi tabel asli.

mysql> alter table dup_orders_copy rename to dup_orders;

mysql> select * from dup_orders;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    350 |
+------+--------+

Bonus Baca :MySQL Tambahkan Batasan Unik

2. Hapus baris duplikat menggunakan INNER JOIN

Anda juga dapat menghapus baris duplikat menggunakan kombinasi pernyataan DELETE dan INNER JOIN. Namun, dalam kasus ini, tabel Anda harus memiliki setidaknya satu kolom unik (misalnya, kunci utama). Katakanlah Anda memiliki dup_orders berikut tabel dengan duplikat jumlah nilai tapi unik id nilai.

mysql> insert into dup_orders(id,amount) values(1, 100),(2,250),(3,350),(4,350);

mysql> select * from dup_orders;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    250 |
|    3 |    350 |
|    4 |    350 |
+------+--------+

Anda dapat menggabungkan tabel di atas dengan dirinya sendiri menggunakan INNER JOIN dan menghapus baris duplikat menggunakan kueri berikut.

mysql> DELETE t1 FROM dup_orders t1
       INNER JOIN dup_orders t2
       WHERE
           t1.id < t2.id 
           AND t1.amount = t2.amount;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    250 |
|    4 |    350 |
+------+--------+

Kueri di atas akan mempertahankan id tertinggi baris untuk setiap baris duplikat. Jika Anda ingin mempertahankan baris dengan id terendah, gunakan kueri berikut.

mysql> DELETE t1 FROM dup_orders t1
       INNER JOIN dup_orders t2
       WHERE
           t1.id >> t2.id 
           AND t1.amount = t2.amount;

Bonus Baca :MySQL Rename Kolom

3. Hapus Duplikat Catatan menggunakan ROW_NUMBER()

Anda juga dapat menghapus rekaman duplikat dari tabel menggunakan fungsi ROW_NUMBER(), tersedia sejak 8.0.2. Inilah kueri SQL untuk mendapatkan nomor baris dari baris duplikat

SELECT *. ROW_NUMBER () Over (PARTITION BY [column] 
ORDER BY [column]) as [row_number_name];

Berikut query untuk mendapatkan nomor baris tabel dup_orders

SELECT *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) 
as row_number from dup_orders;

Kami akan menggunakan ini sebagai sub kueri dalam kueri SQL kami untuk menghapus baris duplikat, seperti yang ditunjukkan di bawah ini

DELETE FROM dup_orders
WHERE id IN (
    SELECT id
    FROM (
        SELECT 
            id, 
            ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number 
           from dup_orders
    ) t
    WHERE row_number > 1
)

Semoga sekarang Anda dapat dengan mudah menghapus duplikat record di MySQL.

Ubiq memudahkan untuk memvisualisasikan data dalam hitungan menit, dan memantau di dasbor waktu nyata. Cobalah Hari ini!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB – MySQL – Tampilkan Mesin untuk Menampilkan Semua Mesin yang Tersedia dan Didukung

  2. PHP PDO:rangkaian karakter, setel nama?

  3. Memahami Tampilan dalam SQL

  4. HAProxy:Semua Sumber Daya Somenines

  5. Periksa x hari berturut-turut - stempel waktu yang diberikan dalam basis data