En måde at gøre dette på er ved at forbinde tabellen på en underforespørgsel ved hjælp af LEFT JOIN . Underforespørgslen får det laveste ID for hver UID . Når en post ikke har match på underforespørgslen, betyder det bare, at den ikke har nogen matchende post og sikkert kan slettes.
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
Men hvis registreringerne af UID kan have et andet navn, så skal du inkludere name på group by klausul eller ellers kun unik uid med det laveste ID forbliver.
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