Mysql
 sql >> Database >  >> RDS >> Mysql

Come trovare duplicati in MySQL

Restituirà tutti i record con duplicati:

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

Mi piace la sottoquery b/c posso fare cose come selezionare tutto tranne il primo o l'ultimo. (quindi molto facile da trasformare in una query di eliminazione).

Esempio:seleziona tutti i record duplicati TRANNE quello con ID max:

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