Jednym ze sposobów na zrobienie tego jest dołączenie do tabeli w podzapytaniu za pomocą LEFT JOIN
. Podzapytanie otrzymuje najniższy ID
dla każdego UID
. Gdy rekord nie pasuje do podzapytania, oznacza to po prostu, że nie ma pasującego rekordu i można go bezpiecznie usunąć.
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
Jeśli jednak rekordy UID
może mieć inną nazwę, należy dołączyć name
w grupie group by
klauzula lub tylko unikalny uid
z najniższym ID
pozostanie.
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