2008-11-20 84 views

Trả lời

47

Để 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 
+0

Đóng đinh nó dude .. Cảm ơn một tấn .. – Bajji

12

Bạn có thể sử dụng "nhóm bằng" trên tất cả các cột và sau đó đếm (*)> 1

+2

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ố –

2

Để 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.

6

Hãy thử điều này

Select * From Table 
Group By [List all fields in the Table here] 
Having Count(*) > 1 
3

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.

Các vấn đề liên quan