Vamos a ver como buscar registros duplicados usando MySQL.
En este ejemplo tenemos la siguiente tabla de personas:
id_persona | Nombre | Apellidos | |
1 | Alberto | Martínez Rovira | oyagum@gmail.com |
2 | Juan | López Roman | jlopez@gmail.com |
3 | María | Sanchez Sanchez | msanchez@gmail.com |
4 | Pedro | Almodovar | palmodovar@gmail.com |
5 | Albert | Martínez | oyagum@gmail.com |
Y como podeis ver a simple vista, hay emails que se encuentran repetidos, aquí es fácil de ver porque son muy pocos registros.
Pero primero, no nos vamos a fiarnos solo de nuestra vista y segundo, ¿porqué vamos a hacer nosotros el trabajo si lo puede hacer una máquina?
Así que realizaremos la siguiente consulta para saber cuantos e-mails hay repetidos:
1 2 3 4 | SELECT COUNT(*) total_repetidos, email FROM personas GROUP By email HAVING total_repetidos > 1 |
En la consulta le hemos dicho que nos devuelva el total de emails repetidos que hay con lo cual nos devolverá lo siguiente:
total_repetidos | |
2 | oyagum@gmail.com |
Como veis lo que nos retorna la consulta es el número de total de repetidos que tenemos y el email en cuestión, así podemos saber cuantos hay repetidos y cual es el repetido.
Espero que os haya servido de ayuda.
Recordad! No olvidéis de comentar! Vuestro código y en el Blog! 😉
Mario
¿como borrarías desde sql solo el duplicado dejando el primer registro en que aparece intacto?
Oyagum
Buenas,
Primero de todo darte las gracias por leer mi blog, y segundo y respondiéndote, he creado un post para responder a tu pregunta:
Puedes ver la entrada aquí: https://www.oyagum.com/articulos/eliminar-registros-duplicados-de-una-tabla/
Jorge
Hola Oyagum, ¿cómo sería la consulta si necesito evaluar dos columnas con valores repetidos?
Saludos y gracias por compartir saberes!
Oyagum
Hola Jorge,
Simplemente tendrías que agrupar por las dos columnas, la consulta quedaría tal que así:
SELECT COUNT(*) total_repetidos, email FROM personas GROUP By nombre, email HAVING total_repetidos > 1
Así cogeríamos los que tienen el mismo nombre y email.
Espero que te haya ayudado.
Y muchas gracias a ti por comentar 😉
Romualdo Zarco
Saludos, Gracias me ha sido util su informacion.
Oyagum
Gracias a ti por leerme 😉
Gislaine
muchas gracias!
Y como podría aplicar ese filtro solamente para una lista de id?
Explico:
tengo una serie de 10 id distintos
y quiero saber si los datos que contienen los 10 id seleccionados existen en otro ID de la misma tabla
Intente con «IN» en «where» pero no sale.
Oyagum
Bueno, primero de todo gracias por visitarme y comentar 😉
A ver si te he entendido y te sirve.
Me he creado una tabla llamada ides con un id autonumérico y un campo id2 que tiene los ids autonuméricos. Y he añadido el campo checked con 0 o 1 y estoy cogiendo todos los registros en que el id2 tenga los ids que estan checked.
Espero te sirva, cualquier cosa me dices.
SELECT * FROM ides WHERE id2 IN (SELECT id FROM ides WHERE checked = 1)