Một cách để thực hiện việc này là tham gia bảng trên một truy vấn con bằng cách sử dụng LEFT JOIN . Truy vấn con nhận ID thấp nhất cho mọi UID . Khi một bản ghi không khớp trên truy vấn con, điều đó chỉ có nghĩa là nó không có bản ghi phù hợp và có thể bị xóa một cách an toàn.
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
Tuy nhiên, nếu các bản ghi của UID có thể có tên khác, khi đó bạn cần bao gồm name trên nhóm group by mệnh đề hoặc chỉ uid duy nhất với ID thấp nhất sẽ vẫn còn.
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