2010-12-16 46 views
5

Tengo una tabla llamada Tabla1 que tiene 48 registros. De los cuales solo 24 deberían estar ahí en esa tabla. Por alguna razón, tengo registros duplicados insertados en él. ¿Cómo elimino los registros duplicados de esa tabla?Eliminación de registros duplicados de una tabla

+2

Si solo hay 48, cargue SSMS y elimínelos manualmente. –

Respuesta

5

Aquí hay algo que usted puede probar si la versión de SQL Server es 2005 o más tarde.

WITH cte AS 
    (
    SELECT {list-of-columns-in-table}, 
     row_number() over (PARTITION BY {list-of-key-columns} ORDER BY {rule-to-determine-row-to-keep}) as sequence 
    FROM myTable 
    ) 

DELETE FROM cte 
WHERE sequence > 1 

Este utiliza una expresión de tabla común (CTE) y añade una columna de secuencia. {list-of-columns-in-table} es como dice. No todas las columnas son necesarias, pero no explicaré aquí.

Las {list-of-key-columns] son ​​las columnas que usa para definir qué es un duplicado.

{rule-to-determine-row-to-keep} es una secuencia para que la primera fila sea la fila que se debe conservar. Por ejemplo, si desea mantener la fila más antigua, usaría una columna de fecha para la secuencia.

Aquí hay un ejemplo de la consulta con columnas reales.

WITH cte AS 
    (
    SELECT ID, CourseName, DateAdded, 
     row_number() over (PARTITION BY CourseName ORDER BY DateAdded) as sequence 
    FROM Courses 
    ) 

DELETE FROM cte 
WHERE sequence > 1 

este ejemplo se quita filas duplicadas basándose en el valor CoursName y mantiene el basesd más antigua en el valor DateAdded.

0

http://support.microsoft.com/kb/139444

Esta sección es la clave . El primario punto que debe llevar. ;)

En este artículo se analiza cómo localizar y eliminar las claves principales duplicadas de una mesa. Sin embargo, debe examinar de cerca el proceso que permitió que los duplicados sucedan para evitar recurrencia.

Identifique sus registros agrupando datos por sus claves lógicas, ya que obviamente no los ha definido, y aplicando una declaración HAVING COUNT (*)> 1 al final. El artículo entra en esto en profundidad.

0

Esta es una manera más fácil

Select * Into #TempTable FROM YourTable 
Truncate Table YourTable 
Insert into YourTable Select Distinct * from #TempTable 
Drop Table #TempTable 
+0

No funciona Dude. Todavía tiene 48 registros después de hacer esto – Sam

+0

Si esto no funciona, significa que no están exactamente duplicados ya que los distintos eliminarían los duplicados, ¿está utilizando una clave principal? – Raymund

+0

No estoy usando la clave principal pero tengo una columna llamada id que es de identidad – Sam

Cuestiones relacionadas