Ett sätt att göra detta är att gå med i tabellen på en underfråga med LEFT JOIN . Underfrågan får det lägsta ID för varje UID . När en post inte har matchning på underfrågan, betyder det bara att den inte har någon matchande post och kan säkert raderas.
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 om posterna för UID kan ha ett annat namn, då måste du inkludera name på group by klausul eller annars bara unik uid med det lägsta ID kommer att finnas kvar.
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