Es fácil encontrar duplicados con un campo:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Entonces si tenemos una mesa
ID NAME EMAIL
1 John [email protected]
2 Sam [email protected]
3 Tom [email protected]
4 Bob [email protected]
5 Tom [email protected]
Esta consulta nos dará a John, Sam, Tom, Tom porque todos tienen lo mismo email
.
Sin embargo, lo que quiero es obtener duplicados con el mismo email
y name
.
Es decir, quiero obtener "Tom", "Tom".
La razón por la que necesito esto: cometí un error y permití insertar duplicados name
y email
valores. Ahora necesito eliminar / cambiar los duplicados, así que primero necesito encontrarlos .
sql
duplicates
Alex
fuente
fuente
name
campo en SELECT.Respuestas:
Simplemente agrupe en ambas columnas.
Nota: el estándar ANSI anterior es tener todas las columnas no agregadas en GROUP BY, pero esto ha cambiado con la idea de "dependencia funcional" :
El soporte no es consistente:
sql_mode=only_full_group_by
:fuente
>1
=1
prueba esto:
SALIDA:
si quieres las ID de los dups usa esto:
SALIDA:
para eliminar los duplicados intente:
SALIDA:
fuente
Prueba esto:
fuente
Si desea eliminar los duplicados, esta es una forma mucho más simple de hacerlo que tener que buscar filas pares / impares en una triple selección secundaria:
Y para eliminar:
Mucho más fácil de leer y entender en mi humilde opinión
Nota: El único problema es que debe ejecutar la solicitud hasta que no se eliminen filas, ya que elimina solo 1 de cada duplicado cada vez
fuente
You can't specify target table 'users' for update in FROM clause
Intenta lo siguiente:
fuente
fuente
Un poco tarde para la fiesta, pero encontré una solución realmente genial para encontrar todas las ID duplicadas:
fuente
GROUP_CONCAT
se detendrá después de una longitud predeterminada, por lo que es posible que no obtenga todos losid
s.prueba este código
fuente
Esto selecciona / elimina todos los registros duplicados, excepto un registro de cada grupo de duplicados. Por lo tanto, la eliminación deja todos los registros únicos + un registro de cada grupo de duplicados.
Seleccionar duplicados:
Eliminar duplicados:
Tenga en cuenta las grandes cantidades de registros, puede causar problemas de rendimiento.
fuente
En caso de que trabaje con Oracle, esta forma sería preferible:
fuente
fuente
Si desea ver si hay filas duplicadas en su tabla, utilicé la siguiente consulta:
fuente
Esto es lo fácil que se me ocurrió. Utiliza una expresión de tabla común (CTE) y una ventana de partición (creo que estas características están en SQL 2008 y versiones posteriores).
Este ejemplo encuentra a todos los estudiantes con nombre y nombre duplicados. Los campos que desea verificar para duplicar van en la cláusula OVER. Puede incluir cualquier otro campo que desee en la proyección.
fuente
fuente
¿Cómo podemos contar los valores duplicados? o se repite 2 veces o más de 2. solo cuéntelos, no en grupo.
tan simple como
fuente
Al usar CTE también podemos encontrar valores duplicados como este
fuente
fuente
SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;
Creo que esto funcionará correctamente para buscar valores repetidos en una columna en particular.
fuente
fuente
Esto también debería funcionar, tal vez intentarlo.
Especialmente bueno en su caso Si busca duplicados que tienen algún tipo de prefijo o cambio general como, por ejemplo, un nuevo dominio en el correo. entonces puede usar replace () en estas columnas
fuente
Si desea encontrar datos duplicados (por uno o varios criterios) y seleccione las filas reales.
http://developer.azurewebsites.net/2014/09/better-sql-group-by-find-duplicate-data/
fuente
fuente
COUNT
sinGROUP BY
, a menos que se refiera a toda la tabla.Para eliminar registros cuyos nombres están duplicados
fuente
Para verificar desde un registro duplicado en una tabla.
o
Para eliminar el registro duplicado en una tabla.
o
fuente
SELECT column_name,COUNT(*) FROM TABLE_NAME GROUP BY column1, HAVING COUNT(*) > 1;
fuente
Podemos usar tener aquí que funciona en funciones agregadas como se muestra a continuación
Aquí, como dos campos, id_account y data se usan con Count (*). Por lo tanto, dará todos los registros que tengan más de una vez los mismos valores en ambas columnas.
Por alguna razón, por error, no hemos agregado ninguna restricción en la tabla del servidor SQL y los registros se han insertado por duplicado en todas las columnas con la aplicación front-end. Entonces podemos usar la consulta a continuación para eliminar la consulta duplicada de la tabla.
Aquí hemos tomado todos los registros distintos de la tabla original y eliminado los registros de la tabla original. Nuevamente, insertamos todos los valores distintos de la nueva tabla en la tabla original y luego eliminamos la nueva tabla.
fuente
Es posible que desee probar esto
fuente
Lo más importante aquí es tener la función más rápida. También se deben identificar los índices de duplicados. La unión automática es una buena opción, pero para tener una función más rápida, es mejor encontrar primero las filas que tienen duplicados y luego unirse a la tabla original para encontrar la identificación de las filas duplicadas. Finalmente ordene por cualquier columna, excepto id, para tener filas duplicadas una cerca de la otra.
fuente
Puede usar la palabra clave SELECT DISTINCT para deshacerse de los duplicados. También puede filtrar por nombre y poner a todos con ese nombre en una tabla.
fuente
El código exacto diferirá dependiendo de si desea encontrar filas duplicadas o solo identificadores diferentes con el mismo correo electrónico y nombre. Si id es una clave principal o tiene una restricción única, esta distinción no existe, pero la pregunta no lo especifica. En el primer caso, puede usar el código proporcionado en varias otras respuestas:
En este último caso usarías:
fuente