Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL rimuove i record duplicati

A volte potrebbe essere necessario rimuovere i record duplicati o eliminare le righe duplicate in MySQL. Esistono principalmente 3 modi per eliminare i record duplicati in MySQL. Ecco come rimuovere i record duplicati in MySQL.

MySQL rimuove i record duplicati

Ecco i passaggi per rimuovere i record duplicati in MySQL. Supponiamo che tu abbia la seguente tabella dup_orders(id, amount) con record duplicati.

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 Lettura:come ottenere record duplicati in MySQL

Come eliminare le righe duplicate in MySQL

Diamo un'occhiata a ciascuno dei 3 modi per eliminare i record duplicati in MySQL.

1. Rimuovi i record duplicati utilizzando la tabella intermedia

Questo metodo prevede 3 passaggi. Innanzitutto, seleziona le righe senza duplicati da dup_orders tabella e inserirli in un'altra tabella. Ecco la sintassi.

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

Ecco la nostra query per selezionare righe distinte da dup_orders in un'altra tabella.

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 |
+------+--------+

La query precedente rimuove le righe che completano il duplicato, ovvero i valori duplicati per tutte le colonne.

Se desideri rimuovere le righe con valori duplicati solo per una o più colonne ma non per tutte, puoi utilizzare una clausola GROUP BY nella query precedente. Ad esempio, se desideri solo righe con valori di colonna ID duplicati nella tabella, utilizza la query seguente.

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 |
+------+--------+

Dopo aver creato la tabella intermedia, rilascia la tabella originale.

mysql> drop table dup_orders;

Infine, rinomina la tabella intermedia in tabella originale.

mysql> alter table dup_orders_copy rename to dup_orders;

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

Bonus Lettura:MySQL aggiunge univoco costante

2. Rimuovi le righe duplicate utilizzando INNER JOIN

Puoi anche rimuovere le righe duplicate usando una combinazione di istruzioni DELETE e INNER JOIN. Tuttavia, in questo caso, la tabella deve avere almeno una colonna univoca (ad es. chiave primaria). Supponiamo che tu abbia i seguenti dup_orders tabella con importo duplicato valori ma id univoci valori.

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 |
+------+--------+

Puoi unire la tabella sopra con se stessa usando un INNER JOIN ed eliminare le righe duplicate usando la seguente query.

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 |
+------+--------+

La query precedente manterrà l'ID più alto della riga per ogni riga duplicata. Se desideri conservare la riga con l'ID più basso, utilizza la query seguente.

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

Bonus Lettura:Colonna Rinomina MySQL

3. Rimuovi i record duplicati utilizzando ROW_NUMBER()

Puoi anche rimuovere i record duplicati dalla tabella usando la funzione ROW_NUMBER(), disponibile dalla versione 8.0.2. Ecco la query SQL per ottenere i numeri di riga delle righe duplicate

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

Ecco la query per ottenere il numero di riga per la tabella dup_orders

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

Lo useremo come sottoquery nella nostra query SQL per eliminare le righe duplicate, come mostrato di seguito

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
)

Si spera che ora sia possibile rimuovere facilmente i record duplicati in MySQL.

Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!