sql server 2005 - sacar - ¿Cómo obtener el código T-SQL para encontrar duplicados?
sql para sacar registros repetidos (4)
AFAIK, no es así. Simplemente haga una agrupación de enunciados selectos por todos los campos de una tabla, y filtrando usando una cláusula having donde el conteo sea mayor que 1.
Si sus filas están duplicadas excepto por la clave, entonces no incluya la clave en los campos de selección.
MS Access tiene un botón para generar código sql para encontrar filas duplicadas. No sé si SQL Server 2005/2008 Managment Studio tiene esto.
Si tiene, señale dónde
Si no lo ha hecho, dígame cómo puedo tener un ayudante de T-SQL para crear código como este.
Bueno, si tienes filas enteras como duplicados en tu tabla, al menos no tienes una clave primaria configurada para esa tabla, de lo contrario, al menos el valor de la clave principal sería diferente.
Sin embargo, aquí está cómo crear un SQL para obtener duplicados en un conjunto de columnas:
SELECT col1, col2, col3, col4
FROM table
GROUP BY col1, col2, col3, col4
HAVING COUNT(*) > 1
Esto encontrará filas que, para las columnas col1-col4, tienen la misma combinación de valores, más de una vez.
Por ejemplo, en la siguiente tabla, las filas 2 + 3 serían duplicadas:
PK col1 col2 col3 col4 col5
1 1 2 3 4 6
2 1 3 4 7 7
3 1 3 4 7 10
4 2 3 1 4 5
Las dos filas comparten valores comunes en las columnas col1-col4 y, por lo tanto, mediante ese SQL, se consideran duplicados. Expanda la lista de columnas para contener todas las columnas para las que desea analizar esto.
Si está utilizando SQL Server 2005+, puede usar el siguiente código para ver todas las filas junto con otras columnas:
SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, col4 ORDER BY (SELECT 0)) AS DuplicateRowNumber
FROM table
También puede eliminar (o trabajar con) duplicados usando esta técnica:
WITH cte AS
(SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, col4 ORDER BY (SELECT 0)) AS DuplicateRowNumber
FROM table
)
DELETE FROM cte WHERE DuplicateRowNumber > 1
ROW_NUMBER es extremadamente potente; hay mucho que puede hacer con él; consulte el artículo de BOL en http://msdn.microsoft.com/en-us/library/ms186734.aspx
Encontré esta solución cuando necesito volcar filas enteras con uno o más campos duplicados, pero no quiero escribir todos los nombres de campo en la tabla:
SELECT * FROM db WHERE col IN
(SELECT col FROM db GROUP BY col HAVING COUNT(*) > 1)
ORDER BY col