Une façon de faire est de joindre la table sur une sous-requête en utilisant LEFT JOIN . La sous-requête obtient le plus petit ID pour chaque UID . Lorsqu'un enregistrement n'a pas de correspondance dans la sous-requête, cela signifie simplement qu'il n'a pas d'enregistrement correspondant et qu'il peut être supprimé en toute sécurité.
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
Cependant, si les enregistrements de UID peut avoir un nom différent, alors vous devez inclure name sur le group by clause ou bien uniquement uid unique avec le plus petit ID restera.
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