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