sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo eliminar filas duplicadas?

Suponiendo que no haya valores nulos, GROUP BY las columnas únicas y SELECT el MIN (or MAX) RowId como la fila a conservar. Luego, simplemente elimine todo lo que no tenía una identificación de fila:

DELETE FROM MyTable
LEFT OUTER JOIN (
   SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
   FROM MyTable 
   GROUP BY Col1, Col2, Col3
) as KeepRows ON
   MyTable.RowId = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL

En caso de que tenga un GUID en lugar de un número entero, puede reemplazar

MIN(RowId)

con

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))