Един от начините да направите това е като присъедините таблицата към подзаявка с помощта на LEFT JOIN
. Подзаявката получава най-ниския ID
за всеки UID
. Когато даден запис няма съвпадение в подзаявката, това просто означава, че няма съвпадащ запис и може да бъде безопасно изтрит.
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
Въпреки това, ако записите на UID
може да има различно име, тогава трябва да включите name
в group by
клауза или само уникален uid
с най-ниския ID
ще остане.
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