Trong bài đăng này, tôi đang chia sẻ hai tập lệnh SQL khác nhau để xóa tất cả các hàng trùng lặp ngoại trừ một trong SQL Server.
Trước đó vài ngày, tôi đang làm báo cáo sản xuất và tìm thấy các bản ghi trùng lặp trong một vài bảng. Tôi đã giải quyết vấn đề này và tạo ra các giải pháp khác nhau để loại bỏ tất cả các hàng trùng lặp.
Trước tiên, hãy tạo một bảng mẫu và dữ liệu:
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE TABLE tbl_RemoveDuplicate ( ID INTEGER PRIMARY KEY ,Name VARCHAR(150) ) GO INSERT INTO tbl_RemoveDuplicate VALUES (1,'ABC'),(2,'XYZ') ,(3,'XYZ'),(4,'RFQ') ,(5,'PQR'),(6,'EFG') ,(7,'EFG'),(8,'ABC') GO |
Giải pháp đầu tiên là sử dụng VỚI CTE:
1 2 3 4 5 6 7 8 9 10 | ;WITH cteDuplicate AS ( SELECT Name ,ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Name) RowNumber FROM tbl_RemoveDuplicate ) DELETE FROM cteDuplicate WHERE RowNumber > 1 GO |
Giải pháp thứ hai là sử dụng SELF JOIN:
1 2 3 4 5 | DELETE FROM A FROM tbl_RemoveDuplicate AS A INNER JOIN tbl_RemoveDuplicate AS B ON A.Name = B.Name AND A.ID > B.ID GO |
Kiểm tra bảng của bạn sau khi loại bỏ các bản sao:
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT *FROM tbl_RemoveDuplicate ORDER BY ID --Result: ID Name ----------- ------------ 1 ABC 2 XYZ 4 RFQ 5 PQR 6 EFG (5 row(s) affected) |