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