Eine Möglichkeit, dies zu tun, besteht darin, die Tabelle in einer Unterabfrage mit LEFT JOIN zu verknüpfen . Die Unterabfrage erhält die niedrigste ID für jede UID . Wenn ein Datensatz keine Übereinstimmung in der Unterabfrage hat, bedeutet dies nur, dass er keinen übereinstimmenden Datensatz hat und sicher gelöscht werden kann.
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
Wenn jedoch die Aufzeichnungen von UID kann einen anderen Namen haben, dann müssen Sie name angeben auf group by -Klausel oder sonst nur eindeutige uid mit der niedrigsten ID bleibt.
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