Een manier om dit te doen is door deel te nemen aan de tabel op een subquery met behulp van LEFT JOIN
. De subquery krijgt de laagste ID
voor elke UID
. Als een record geen overeenkomst heeft in de subquery, betekent dit alleen dat deze geen overeenkomende record heeft en veilig kan worden verwijderd.
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
Als de records van UID
kan een andere naam hebben, dan moet u name
. opnemen op de group by
clausule of anders alleen unieke uid
met de laagste ID
zal blijven.
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