Este artículo explica el proceso de realizar la actividad de eliminación de SQL para filas duplicadas de una tabla SQL.
Introducción
Debemos seguir ciertas mejores prácticas al diseñar objetos en SQL Server. Por ejemplo, una tabla debe tener claves primarias, columnas de identidad, índices agrupados y no agrupados, restricciones para garantizar la integridad y el rendimiento de los datos. Incluso seguimos las mejores prácticas y podríamos enfrentarnos a problemas como filas duplicadas. También podríamos obtener estos datos en tablas intermedias en la importación de datos, y queremos eliminar las filas duplicadas antes de insertarlas en las tablas de producción.
Suponga que su tabla SQL contiene filas duplicadas y desea eliminar esas filas duplicadas . Muchas veces nos enfrentamos a estos problemas. También es una buena práctica usar las claves relevantes, restricciones para eliminar la posibilidad de filas duplicadas, sin embargo, si ya tenemos filas duplicadas en la tabla. Necesitamos seguir métodos específicos para limpiar datos duplicados. Este artículo explora los diferentes métodos para eliminar datos duplicados de la tabla SQL.
Creemos una tabla de empleados de muestra e insertemos algunos registros en ella.
En la tabla, tenemos un pocos registros duplicados, y necesitamos eliminarlos.
SQL elimina filas duplicadas usando Group By y la cláusula que tiene
En este método, usamos la cláusula SQL GROUP BY para identificar el duplicado filas. La cláusula Agrupar por agrupa los datos según las columnas definidas y podemos usar la función COUNT para verificar la ocurrencia de una fila.
Por ejemplo, ejecutamos la siguiente consulta y obtenemos aquellos registros que tienen una ocurrencia mayor que 1 en la tabla Empleado.
En el resultado anterior, tenemos dos registros duplicados con ID 1 y 3.
- Emp ID 1 tiene dos apariciones en la tabla Employee
- Emp ID 3 tiene tres apariciones en la tabla Employee
Requerimos mantener una sola fila y elimine las filas duplicadas. Necesitamos eliminar solo filas duplicadas de la tabla. Por ejemplo, el EmpID 1 aparece dos veces en la tabla. Queremos eliminar solo una aparición.
Usamos la función SQL MAX para calcular el ID máximo de cada fila de datos.
En la siguiente captura de pantalla, podemos ver que el La declaración de selección anterior excluye el ID máximo de cada fila duplicada y obtenemos solo el valor de ID mínimo.
Para eliminar estos datos, reemplace el Primero, seleccione con la declaración SQL Delete según la siguiente consulta.
Una vez que ejecute la declaración de eliminación, realice una selección en una tabla de empleados y obtendremos los siguientes registros que no contienen filas duplicadas.
SQL elimina filas duplicadas usando Expresiones de tabla comunes (CTE)
Podemos usar Expresiones de tabla comunes comúnmente conocidas como CTE para eliminar filas duplicadas en SQL Server. Está disponible a partir de SQL Server 2005.
Usamos una función SQL ROW_NUMBER, y agrega un número de fila secuencial único para la fila.
En el siguiente CTE, divide el datos usando la cláusula PARTITION BY para la columna, y y genera un número de fila para cada fila.
En la salida, si alguna fila tiene el valor de la columna mayor que 1, muestra que es un duplicado fila.
Podemos eliminar las filas duplicadas usando el siguiente CTE.
Elimina las filas teniendo el valor mayor que 1
Función RANK para eliminar filas duplicadas de SQL
También podemos usar la función RANK de SQL para eliminar las filas duplicadas. La función SQL RANK proporciona un ID de fila único para cada fila independientemente de la fila duplicada.
En la siguiente consulta, usamos una función RANK con la cláusula PARTITION BY. La cláusula PARTITION BY prepara un subconjunto de datos para las columnas especificadas y da rango para esa partición.
En la captura de pantalla, puede notar que debemos eliminar la fila que tiene un rango mayor que uno. Eliminemos esas filas con la siguiente consulta.
Utilice el paquete SSIS para eliminar filas duplicadas de SQL
El servicio de integración de SQL Server proporciona varios operadores de transformación que ayudan tanto a los administradores como a los desarrolladores a reducir el esfuerzo manual y optimizar las tareas. El paquete SSIS también puede eliminar las filas duplicadas de una tabla SQL.
Use el operador Sort en un paquete SSIS para eliminar filas duplicadas
Podemos usar un operador Sort para ordenar los valores en una tabla SQL. Puede preguntar cómo la clasificación de datos puede eliminar filas duplicadas.
Creemos el paquete SSIS para mostrar esta tarea.
- En SQL Server Data Tools, cree un nuevo paquete de integración.En el nuevo paquete, agregue una conexión de origen OLE DB
-
Abra el editor de origen OLE DB y configure la conexión de origen y seleccione la tabla de destino
-
Haga clic en Vista previa de datos y verá que todavía tenemos datos duplicados en la tabla de origen
-
Agregue un operador de clasificación de la caja de herramientas SSIS para la operación de eliminación de SQL y únalo con los datos de origen
Para la configuración del operador Sort, haga doble clic en él y seleccione las columnas que contienen valores duplicados. En nuestro caso, el valor duplicado está en,, columnas.
También podemos usar los tipos de clasificación ascendente o descendente para las columnas. El método de clasificación predeterminado es ascendente. En el orden de clasificación, podemos elegir el orden de clasificación de las columnas. El orden de clasificación 1 muestra la columna que se ordenará primero.
En la parte inferior izquierda, observe una casilla de verificación Eliminar filas con valores de ordenación duplicados.
Hará la tarea de eliminar filas duplicadas de los datos de origen. Marquemos esta casilla de verificación y hagamos clic en Aceptar. Realiza la actividad de eliminación de SQL en el paquete SSIS.
Una vez que hacemos clic en Aceptar, regresa a la pestaña de flujo de datos, y podemos ver el siguiente paquete SSIS.
Podemos agregar destinos de SQL Server para almacenar los datos después de eliminar filas duplicadas. Solo queremos verificar que el operador de clasificación esté haciendo la tarea por nosotros o no.
Agregue una transformación de multidifusión SQL desde la caja de herramientas SSIS como se muestra a continuación.
Para ver los datos distintos, haga clic con el botón derecho en el conector entre Ordenar y Multidifusión. Haga clic en Habilitar visor de datos.
El paquete SSIS general se ve a continuación.
Ejecute el paquete para realizar la operación de eliminación de SQL. Abre el visor Ordenar datos de salida en la tarea Flujo de datos. En este visor de datos, puede ver datos distintos después de eliminar los valores duplicados.
Cierre esto y el paquete SSIS se mostrará correctamente ejecutado.
Conclusión
En este artículo, exploramos el proceso de SQL para eliminar filas duplicadas usando varias formas, como el paquete T-SQL, CTE y SSIS. Puede utilizar el método en el que se sienta cómodo. Sin embargo, sugeriría no implementar estos procedimientos y empaquetar directamente los datos de producción. Debes probar en un entorno inferior.
- Autor
- Publicaciones recientes
Es el creador de una de las mayores colecciones gratuitas de artículos en línea sobre un solo tema, con su serie de 50 partes sobre los grupos de disponibilidad Always On de SQL Server. Basado en su contribución a la comunidad de SQL Server, ha sido reconocido con varios premios, incluido el prestigioso «Mejor autor del año» continuamente en 2020 y 2021 en SQLShack.
Raj siempre está interesado en nuevos desafíos, así que si necesita consultoría ayuda sobre cualquier tema tratado en sus escritos, puede ser contactado en [email protected]
Ver todas las publicaciones de Rajendra Gupta
- Realización de actualizaciones de versiones menores y mayores para AWS RDS SQL Server: 29 de enero de 2021
- Implementación de instancias de AWS RDS PostgreSQL: 27 de enero de 2021
- Migración de sus bases de datos SQL locales a AWS RDS SQL Server mediante AWS DMS: 25 de enero , 2021