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