sql >> Base de Datos >  >> RDS >> Mysql

Cómo encontrar duplicados en MySQL

Devolverá todos los registros que tengan duplicados:

SELECT theTable.*
FROM theTable
INNER JOIN (
  SELECT link, size
  FROM theTable 
  GROUP BY link, size
  HAVING count(ID) > 1
) dups ON theTable.link = dups.link AND theTable.size = dups.size

Me gusta la subconsulta porque puedo hacer cosas como seleccionar todo menos el primero o el último. (muy fácil de convertir en una consulta de eliminación entonces).

Ejemplo:seleccione todos los registros duplicados EXCEPTO el que tiene el ID máximo:

SELECT theTable.*
FROM theTable
INNER JOIN (
  SELECT link, size, max(ID) as maxID
  FROM theTable 
  GROUP BY link, size
  HAVING count(ID) > 1
) dups ON theTable.link = dups.link 
          AND theTable.size = dups.size 
          AND theTable.ID <> dups.maxID