Un modo per farlo è unire la tabella su una sottoquery usando LEFT JOIN . La sottoquery ottiene l'ID più basso per ogni UID . Quando un record non ha una corrispondenza nella sottoquery, significa semplicemente che non ha alcun record corrispondente e può essere eliminato in modo sicuro.
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
Tuttavia, se i record di UID può avere un nome diverso, quindi devi includere name nel group by clausola oppure solo uid univoco con il ID più basso rimarrà.
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