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