Saltar al contenido

¿Eliminar registros duplicados en SQL Server?

Si encuentras algún detalle que te causa duda puedes dejarlo en la sección de comentarios y trataremos de ayudarte rápidamente.

Solución:

Puede hacer esto con las funciones de ventana. Ordenará los duplicados por empId y eliminará todos menos el primero.

delete x from (
  select *, rn=row_number() over (partition by EmployeeName order by empId)
  from Employee 
) x
where rn > 1;

Ejecútelo como una selección para ver qué se eliminaría:

select *
from (
  select *, rn=row_number() over (partition by EmployeeName order by empId)
  from Employee 
) x
where rn > 1;

Suponiendo que su tabla de empleados también tiene una columna única (ID en el ejemplo a continuación), lo siguiente funcionará:

delete from Employee 
where ID not in
(
    select min(ID)
    from Employee 
    group by EmployeeName 
);

Esto dejará la versión con el ID más bajo en la tabla.

Editar

Comentario de Re McGyver – a partir de SQL 2012

MIN se puede usar con columnas numéricas, char, varchar, identificador único o de fecha y hora, pero no con columnas de bits

Para 2008 R2 y anteriores,

MIN se puede usar con columnas numéricas, char, varchar o de fecha y hora, pero no con columnas de bits (y tampoco funciona con GUID)

Para 2008R2 necesitarás lanzar el GUID a un tipo soportado por MINp.ej

delete from GuidEmployees
where CAST(ID AS binary(16)) not in
(
    select min(CAST(ID AS binary(16)))
    from GuidEmployees
    group by EmployeeName 
);

SqlFiddle para varios tipos en Sql 2008

SqlFiddle para varios tipos en Sql 2012

Podrías intentar algo como lo siguiente:

delete T1
from MyTable T1, MyTable T2
where T1.dupField = T2.dupField
and T1.uniqueField > T2.uniqueField  

(esto supone que tiene un campo único basado en enteros)

Personalmente, diría que es mejor que intente corregir el hecho de que las entradas duplicadas se agregan a la base de datos antes de que ocurra en lugar de una operación posterior a la reparación.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *