DELETE t2 FROM table1 t2
INNER JOIN table1 t1 ON
(t1.somefield = t2.somefield
AND t1.otherfield = t2.otherfield /*add more fields if need be */
AND t2.id > t1.id)
LEFT JOIN table1 t3 ON
(t1.somefield = t3.somefield
AND t1.otherfield = t3.otherfield /*add more fields if need be */
AND t3.id > t2.id)
WHERE (t3.id IS NULL)
ORDER BY t2.id ASC
Esto sólo debe eliminar el segundo duplicado y deja el tercero y más allá de los duplicados solo.
si quieres algo menos esotérica, y tiene una columna de marca de tiempo, tal vez usted quiere hacer
DELETE t2 FROM table1 t2
INNER JOIN table1 t1 ON
(t1.somefield = t2.somefield
AND t1.otherfield = t2.otherfield /*add more fields if need be */
AND t2.`timestamp` > t1.`timestamp`)
WHERE (1=1) /*In some mode(s) MySQL requires a where clause with delete*/
ORDER BY t2.id ASC
publique la definición de su tabla. –
¿Son duplicados exactos, o tiene una clave única en alguna parte? – Jason
Un verdadero duplicado es la copia exacta del original. ¿Realmente tiene duplicados, o tiene filas donde muchos de los datos son idénticos, pero algo como la columna de autoinc o la fecha de creación son diferentes? – Zak