02/10/2018, 00:39

Hướng dẫn tìm kiếm và xóa dữ liệu trùng lắp Duplicate trong Microsoft Sqlserver 2016

Bài viết hôm nay, mình xin hướng dẫn các bạn cách tìm kiếm và xóa dữ liệu trùng lắp trong Sql server. Trong quá trình, làm việc với Sqlserver, không ít lần dữ liệu của các bạn có thể bị trùng lắp (Duplicate), mà những dữ liệu đó không cần thiết, bạn có thể ...

Bài viết hôm nay, mình xin hướng dẫn các bạn cách tìm kiếm và xóa dữ liệu trùng lắp trong Sql server. Trong quá trình, làm việc với Sqlserver, không ít lần dữ liệu của các bạn có thể bị trùng lắp (Duplicate), mà những dữ liệu đó không cần thiết, bạn có thể xóa chúng đi để tối ưu hóa database hoặc tính toán dữ liệu được chính xác.

Vậy làm cách nào để có thể tìm kiếm ra những dòng dữ liệu trùng đó, và xóa chúng đi chỉ để lại duy nhất một dòng.

Các ban có thể làm theo hướng dẫn bên dưới, chỉ một vài dòng lệnh T-SQL, có thể giải quyết được vấn đề.

Xóa dữ liệu trùng lắp trong sqlserver

Ví dụ: mình có database dữ liệu NORTHWND và bảng table Customer làm ví dụ:

Cấu trúc dữ liệu của bảng Customer:

cấu trúc bảng customers

Dưới đây là dữ liệu của bảng Customer.

bảng dữ liệu data

Các bạn có thể thấy dữ liệu ở hình trên cột Country trùng nhau.'

Bây giờ, mình viết câu lệnh đếm xem cộ Country có bao nhiêu dòng dữ liệu bị trùng, và dòng dữ liệu nào trùng sẽ hiển thị lên

select * from Customers
SELECT country , COUNT(country) AS number_record
FROM Customers
GROUP BY Country
HAVING COUNT(country) > 1

- Tiếp theo, mình viết tiếp câu lệnh cho hiển thị đầy đủ những dòng dữ liệu bị Duplicate

SELECT *
FROM Customers
WHERE country IN (
SELECT country
FROM Customers
GROUP BY Country
HAVING COUNT(Country) > 1
)
ORDER BY country

- Câu lệnh xóa dữ liệu trùng nhau, chỉ để lại một Record duy nhất

Đầu tiên, các bạn thêm vào cột Id kiểu int và cho tự động tăng. (indentity = true), để mình lấy dòng nào có id lớn hơn sẽ để lại một dòng, nếu sql vẫn không cho các bạn xóa vì dính tham chiếu khóa, các bạn có thể tắt khóa chính, sau khi chạy xong câu lệnh rồi bật lên lại.

DELETE n1
FROM customers n1, customers n2
WHERE n1.country = n2.country AND n1.id > n2.id

Các bạn có thể download dữ liệu NORTHWND tại link bên dưới

link download

Chúc các bạn thành công. Mọi câu hỏi thắc mắc đến bài viết xin truy cập http://hoidap.laptrinhvb.net để được support.yes

ĐỪNG QUÊN LIKE AND SHARE NHA CÁC BẠN. 

CÁM ƠN CÁC BẠN ĐÃ THEO DÕI.

Tags:
0