Uma maneira de fazer isso é unindo a tabela em uma subconsulta usando
LEFT JOIN
. A subconsulta obtém o ID
mais baixo para cada UID
. Quando um registro não tem correspondência na subconsulta, significa apenas que ele não tem registro correspondente e pode ser excluído com segurança. 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
No entanto, se os registros de
UID
pode ter um nome diferente, então você precisa incluir name
no group by
cláusula ou então apenas uid
exclusivo com o ID
mais baixo 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