Una forma de hacerlo es unir la tabla en una subconsulta usando LEFT JOIN
. La subconsulta obtiene el ID
más bajo para cada UID
. Cuando un registro no coincide con la subconsulta, simplemente significa que no tiene un registro coincidente y se puede eliminar de forma segura.
DELETE a
FROM TableName a
LEFT JOIN
(
SELECT uid, MIN(ID) min_ID
FROM TableName
GROUP BY uid
) b ON a.uid = b.uid AND
a.ID = b.min_ID
WHERE b.uid IS NULL
Sin embargo, si los registros de UID
puede tener un nombre diferente, entonces debe incluir name
en el group by
cláusula o solo uid
único con el ID
más bajo permanecerá.
DELETE a
FROM TableName a
LEFT JOIN
(
SELECT uid, MIN(ID) min_ID, name
FROM TableName
GROUP BY uid, name
) b ON a.uid = b.uid AND
a.ID = b.min_ID AND
a.name = b.name
WHERE b.uid IS NULL