MYSQL La base de datos

Buscar registros repetidos tabla MySQL [Completo]

Buscar registros repetidos y lo mostraremos para darle una solución

Buscar registros repetidos tabla MySQL. Este código SQL sirve buscar si dentro de una determinada tabla hay campos repetidos. Además, vamos a contar el total de registros duplicados, con una sentencia muy sencilla.

En este artículo realizaremos dos ejemplos para buscar duplicados y lo mostraremos a través de una consulta. Sin embargo, también le daremos solución para que no vuelva a ocurrir.

¿Qué sentencia se usará en el ejemplo?

Por ejemplo, para lograr nuestro objetivo usaremos:

  • Select : se utiliza para mostrar datos.
  • Count : se utiliza para contar los resultados de una consulta.
  • Group by : se utiliza para agrupar los resultados de una consulta.
  • Having : se utiliza para incluir condiciones con alguna función SQL del tipo SUM, MAX,etc.

Ahora, la idea es implementar estas sentencias en una de nuestras tablas para hallar los registros duplicados que a veces genera errores cuando deseamos relacionar tablas.

Buscar registros repetidos tabla MySQL

Vamos a suponer que tenemos la siguiente tabla MySQL con los siguientes registros duplicados. Sin embargo, a simple vista no habría problema para corregir, pero el detalle esta cuando son miles de registros en la tabla mencionada.

id    nombre
1     AAAA
2     BBBB
3     BBBB
4     BBBB
5     AAAA
6     CCCC
7     DDDD

Estructura de la tabla

CREATE TABLE `demo` (
`id` int(11) NOT NULL,
`nombre` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `demo` (`id`, `nombre`) VALUES
(1, 'AAAA'),
(2, 'BBBB'),
(3, 'BBBB'),
(4, 'BBBB'),
(5, 'AAAA'),
(6, 'CCCC'),
(7, 'DDDD');

ALTER TABLE `demo`
ADD PRIMARY KEY (`id`);

ALTER TABLE `demo`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;

Consulta de duplicados

Con esta simple consulta podemos hallar los registros duplicados en nuestra tabla.

select nombre,  count(nombre) c from demo
group by nombre having c >1

Al ejecutar esta query obtendremos el siguiente resultado:

nombre duplicados
AAAA 2
BBBB 3

Contar en total de registros duplicados

En el ejemplo anterior los nombres duplicados son AAAA y BBBB. Ahora, nos piden el resultado total de duplicados, en este ejemplo seria 2 (AAA A y BBBB) para lograr este resultado solo debemos de agregar una sub consulta a la consulta inicial.

SELECT count(*) AS total_duplicados
FROM (
SELECT nombre FROM demo
GROUP BY nombre HAVING COUNT(nombre) > 1
) as ver

Resultados de la consulta

total_duplicados
2

Ejemplo con una tabla «Clientes»

Esta consulta lo que hace es hacer contar usando la sentencia “count” de los resultados de la consulta interna.

CREATE TABLE `clientes` (
`id` int(11) NOT NULL,
`nombres` varchar(100) NOT NULL,
`apellidos` varchar(100) NOT NULL,
`telefono` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `clientes` (`id`, `nombres`, `apellidos`, `telefono`) VALUES
(1, 'Luis', 'Perez', '600100100'),
(2, 'Antonio', 'Perez', '699230671'),
(3, 'Marcos', 'Fernandez', '600100100'),
(4, 'Luis', 'Perez', '699230671'),
(5, 'Pedro', 'Sanchez', '600100100'),
(6, 'Ana', 'Alvarez', '876123000'),
(7, 'Maria', 'Garcia', '902130823'),
(8, 'Victor', 'Prado', '654100601'),
(9, 'Carlos', 'Sandoval', '600100100');

Mostrar Clientes Repetidos

Para ver su uso, un ejemplo: en tabla llamada «clientes» con 4 campos (id, nombre, apellidos, telefono), queremos averiguar si hay registros con el teléfono:

-- Telefonos repetidos
SELECT telefono FROM clientes
GROUP BY telefono
HAVING COUNT(*)>1;

-- Resultado
-- 699230671
-- 600100100

Lo que necesitamos es agrupar los registros por un valor que deseamos buscar los registros repetidos y con la sentencia HAVING COUNT(*)>1 mostrara los valores repetidos mayores a uno.

-- Nº de veces que esta repetido cada telefono

SELECT telefono, count(*) FROM clientes
GROUP BY telefono
HAVING COUNT(*)>1;

-- Resultado
-- telefono          count
-- 699230671           2
-- 600100100           4

Con este código sql podremos averiguar si existen valores repetidos en una tabla, y si los hay, contarlo .

Buscar registros NO repetidos en MYSQL

Podemos realizar del mismo modo que se buscan los repetidos se puede saber los que no se repiten. Sin emabrgo, solo hay que cambiar <1 por =1 para tener los clientes que son unicos.

-- Usuarios con telefono unico
SELECT telefono, COUNT(*) as num_repeticiones FROM clientes u
GROUP BY telefono
HAVING COUNT(*)=1;

-- Resultado
-- telefono              num_repeticiones
-- 902130823                           1
-- 654100601                           1
-- 876123000                           1

Borrar registros repetidos en SQL

Para dar solución al problema de registros duplicados podemos borrar todos los registros repetidos basta con usar la sentencia DELETE a la consulta que nos devuelve los registros repetidos.

-- Borrar todos los repetidos
DELETE FROM clientes
WHERE telefono IN (SELECT telefono FROM clientes
GROUP BY telefono
HAVING COUNT(*)>1);

NOTA IMPORTANTE:

Si deseamos realizar consultas de borrado, siempre es recomendable sacar una copia de seguridad de la tabla o base de datos.

Solución para evitar registros duplicados

Prmeramente tenemos que eliminar los registros duplicados, caso contrario no podremos aplicar esta estrategia.

La restricción UNIQUE asegura que todos los valores de una columna sean diferentes.

Tanto las restricciones UNIQUE como PRIMARY KEY proporciona una garantía de unicidad para una columna o un conjunto de columnas.

Ejemplo

ALTER TABLE `clientes` ADD UNIQUE(`telefono`);

Con esta consulta le estamos diciendo a MySQL que la columna telefono no debe de aceptar registros duplicado y emitirá un mensaje de error.

Otra solución es usando un lenguaje de programación PHP que al insertar busca en la tabla y si la consulta es satisfactoria no insertara el registro.

CONCLUSION DEL ARTICULO

  • Hemos aprendido a usar la sentencia Having para hallar registros duplicados y con dos ejemplos le hemos dado solución.
  • Además, hemos aprendido a mostrar duplicados, ver registros únicos, borrar duplicados, contar el total de registros duplicados en una tabla.
  • Por último, hemos aprendido a dar solución a los registros duplicado, por base de datos y lenguaje de programación.

Sí, estamos trabajando con base de datos de producción siempre sacar una copia de seguridad por precaución y por tener un respaldo por algún error de consultas.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

3 comentarios

  1. Hola Néstor, estoy haciendo mi primera base de datos que consiste en libros leídos y no leído, pero la verdad no se como hacerlo.
    Podrás ayudarme?

  2. Excelente info. Pero, y si en una sola pantalla quiero mostrar tanto los repetidos como los NO repetidos en orden alfabetico? Y claro, la cantidad de veces repetido a un costado.

    AAAA – 2
    BBBB – 3
    CCCC – 1
    DDDD – 1

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba