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