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