sql >> Base de Datos >  >> RDS >> Mysql

MySQL Eliminar registros duplicados

A veces, es posible que deba eliminar registros duplicados o eliminar filas duplicadas en MySQL. Existen principalmente 3 formas de eliminar registros duplicados en MySQL. Aquí se explica cómo eliminar registros duplicados en MySQL.

MySQL Eliminar Registros Duplicados

Estos son los pasos para eliminar registros duplicados en MySQL. Digamos que tiene la siguiente tabla dup_orders(id, cantidad) con registros duplicados.

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

Lectura adicional:Cómo obtener registros duplicados en MySQL

Cómo eliminar filas duplicadas en MySQL

Veamos cada una de las 3 formas de eliminar registros duplicados en MySQL.

1. Eliminar registros duplicados usando la tabla intermedia

Este método consta de 3 pasos. Primero, seleccione filas sin duplicados, de dup_orders mesa e insértelos en otra mesa. Esta es la sintaxis para ello.

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

Aquí está nuestra consulta para seleccionar filas distintas de dup_orders en otra tabla.

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 consulta anterior elimina filas que se duplican por completo, es decir, valores duplicados para todas las columnas.

Si desea eliminar filas con valores duplicados para una o más columnas, pero no para todas, puede usar una cláusula GROUP BY en la consulta anterior. Por ejemplo, si solo desea filas con valores de columna de ID duplicados en su tabla, use la siguiente consulta.

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

Una vez que haya creado la tabla intermedia, suelte la tabla original.

mysql> drop table dup_orders;

Finalmente, cambie el nombre de la tabla intermedia a la tabla original.

mysql> alter table dup_orders_copy rename to dup_orders;

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

Lectura adicional:MySQL Agregar constancia única

2. Eliminar filas duplicadas usando INNER JOIN

También puede eliminar filas duplicadas mediante la combinación de instrucciones DELETE e INNER JOIN. Sin embargo, en este caso, su tabla debe tener al menos una columna única (por ejemplo, clave principal). Supongamos que tiene los siguientes dup_orders tabla con cantidad duplicada valores pero id único valores.

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

Puede unir la tabla anterior consigo misma mediante INNER JOIN y eliminar las filas duplicadas mediante la siguiente consulta.

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 consulta anterior conservará la identificación de fila más alta para cada fila duplicada. Si desea conservar la fila con el ID más bajo, utilice la siguiente consulta.

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

Lectura adicional:Columna de cambio de nombre de MySQL

3. Eliminar registros duplicados usando ROW_NUMBER()

También puede eliminar registros duplicados de la tabla usando la función ROW_NUMBER(), disponible desde 8.0.2. Aquí está la consulta SQL para obtener números de fila de filas duplicadas

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

Aquí está la consulta para obtener el número de fila de la tabla dup_orders

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

Usaremos esto como una subconsulta en nuestra consulta SQL para eliminar filas duplicadas, como se muestra a continuación

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
)

Con suerte, ahora puede eliminar fácilmente los registros duplicados en MySQL.

Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!