Cách hiệu quả nhất để phát hiện các bản sao trong bảng hàng 10 cột/50K là gì? Tôi đang sử dụng MSSQL 8,0Cách phát hiện hàng trùng lặp trong bảng SQL Server?
Trả lời
Để hiển thị một ví dụ về những gì người khác đã được mô tả:
SELECT
Col1, -- All of the columns you want to dedupe on
Col2, -- which is not neccesarily all of the columns
Col3, -- in the table
Col4,
Col5,
Col6,
Col7,
Col8,
Col9,
Col10
FROM
MyTable
GROUP BY
Col1,
Col2,
Col3,
Col4,
Col5,
Col6,
Col7,
Col8,
Col9,
Col10
HAVING
COUNT(*) > 1
Bạn có thể sử dụng "nhóm bằng" trên tất cả các cột và sau đó đếm (*)> 1
hoạt động tốt, chỉ cần nhớ loại trừ một PK tổng hợp nếu bạn có một số –
Để phát hiện, chỉ cần nhóm bằng như Guge nói.
select fieldA, fieldB, count(*) from table
group by fieldA, fieldB
having count(*) > 1
Nếu bạn muốn xóa giá trị nhân bản ... giả ....
select distinct into a temp table
truncate original table
select temp table back into original table
Với truncate bạn có thể gặp vấn đề nếu bạn có những hạn chế FK, vì vậy hãy thông minh về thả hạn chế và đảm bảo bạn không có hồ sơ mồ côi.
Hãy thử điều này
Select * From Table
Group By [List all fields in the Table here]
Having Count(*) > 1
Ngoài những gợi ý cung cấp, tôi sẽ sau đó đi đến các nỗ lực của bản sao ngăn chặn trong trong tương lai, thay vì cố gắng định vị chúng sau này.
Điều này được thực hiện bằng cách sử dụng chỉ mục duy nhất trên cột (hoặc nhóm cột) được cho là duy nhất. Hãy nhớ rằng dữ liệu trong cơ sở dữ liệu có thể được sửa đổi từ các vị trí khác ngoài ứng dụng cụ thể mà bạn đang làm việc, vì vậy tốt nhất bạn nên xác định những gì được cho phép trong bảng ở cấp DB.
Đóng đinh nó dude .. Cảm ơn một tấn .. – Bajji