Xóa dữ liệu trùng nhau trong SQL Server
Trong bài này mình sẽ hướng dẫn các bạn cách xóa dữ liệu trùng nhau trong SQL Server. Đây là trường hợp khá phổ biến khi bạn vô tình nhập dữ liệu trùng nhau quá nhiều và muốn xóa chúng ra khỏi table.
Để xóa duplicate dữ liệu thì ta thực hiện ba bước như sau:
- Tìm các dòng trùng nhau bằng GROUP BY và ROW_NUMBER().
- Sử dụng lệnh Delete để xóa các row trùng.
Ok, ta sẽ thực hành thông qua một ví dụ cụ thể luôn nhé.
1. Tạo dữ liệu mẫu trùng nhau
Hãy tạo một table bằng câu lệnh SQL sau:
Bài viết này được đăng tại [free tuts .net]
DROP TABLE IF EXISTS sales.contacts; CREATE TABLE sales.contacts( contact_id INT IDENTITY(1,1) PRIMARY KEY, first_name NVARCHAR(100) NOT NULL, last_name NVARCHAR(100) NOT NULL, email NVARCHAR(255) NOT NULL, );
Tiếp đến hãy insert vào dòng dữ liệu, trong đó có dữ liệu trùng nhau nhé.
INSERT INTO sales.contacts (first_name,last_name,email) VALUES ('Syed','Abbas','syed.abbas@example.com'), ('Catherine','Abel','catherine.abel@example.com'), ('Kim','Abercrombie','kim.abercrombie@example.com'), ('Kim','Abercrombie','kim.abercrombie@example.com'), ('Kim','Abercrombie','kim.abercrombie@example.com'), ('Hazem','Abolrous','hazem.abolrous@example.com'), ('Hazem','Abolrous','hazem.abolrous@example.com'), ('Humberto','Acevedo','humberto.acevedo@example.com'), ('Humberto','Acevedo','humberto.acevedo@example.com'), ('Pilar','Ackerman','pilar.ackerman@example.com');
Bây giờ hãy sử dụng lệnh Select để xem tổng thể của table vừa tạo đó.
SELECT contact_id, first_name, last_name, email FROM sales.contacts;
Kết quả sẽ như hình dưới đây.
Có ba cặp dữ liệu trùng đó là: (3,4,5), (6,7), và (8,9).
2. Xóa dữ liệu trùng nhau từ bảng đã tạo
Trong lệnh này có sử dụng common table expression (CTE), nếu bạn chưa biết nó là gì thì có thể tra google để xem thêm nhé.
WITH cte AS ( SELECT contact_id, first_name, last_name, email, ROW_NUMBER() OVER ( PARTITION BY first_name, last_name, email ORDER BY first_name, last_name, email ) row_num FROM sales.contacts ) DELETE FROM cte WHERE row_num > 1;
Chạy câu lệnh này và xem lại trong table thì bạn sẽ thấy các row trùng nhau đã bị xóa.
Như vậy, với câu lệnh đơn giản trên là bạn có thể xóa dữ liệu trùng nhau trong SQL Server rồi đấy. Bạn có thể thay đổi tên field và table cho giống với table hiện tại của bạn. Chúc thành công!