CopiaEsta es una consulta muy sencilla pero que a muchos principiantes les resulta de mucha utilidad, así que como hoy he tenido que usarla y me he acordado, la pongo aquí por si a alguien le viene bien.

El problema es el habitual: tenemos una tabla con muchos registros y queremos saber si alguno de ellos está duplicado. Lo más común no es que nos interese realmente saber qué registros están duplicados, sino qué registros tienen dos o tres campos iguales.

Por ejemplo, si tenemos una lista de clientes quizá no nos interesa saber quiénes están duplicados buscándolos por el nombre (ya que éste puede haber sido escrito diferente: con o sin tilde, con abreviatura o no), por lo que resultaría más interesante averiguar aquellos registros que tienen el teléfono y el email duplicados por ejemplo.

La consulta es muy fácil, y usa una función de agrupamiento para determinarlo. La consulta genérica sería esta:

   1: SELECT COUNT(*), CAMPO_A, CAMPO_B
   2: FROM TABLA
   3: GROUP BY CAMPO_A, CAMPO_B
   4: HAVING COUNT(*)>1;

Así pues, para el ejemplo de los clientes duplicados escribiríamos algo como esto:

   1: SELECT Telefono, EMail, COUNT(*)
   2: FROM Clientes
   3: GROUP BY Telefono, EMail
   4: HAVING COUNT(*)>1;

Y nos devolvería una lista de los clientes cuyo email y teléfono coinciden exactamente, y cuántas veces (para saber cuántas veces los tenemos repetidos).

A partir de aquí ya es más o menos fácil (según la estructura de nuestra tabla y el número de campos involucrados) sacar un listado completo usando lo anterior en sub-consultas.

Este tipo de consulta funcionará sin problemas en cualquier gestor de bases de datos relacionales (SQL Server, MySQL, Oracle,... incluso Access)

Sencillo pero útil.

¡Espero que te sirva de ayuda!

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor