2011-07-21 40 views
11

thể trùng lặp:
SQL - How can I remove duplicate rows?TSQL Remove nhân đôi hàng trên một số cột chỉ

Ví dụ đây là bàn của tôi:

SiteKey, Tên, TP

Các SiteKey là tự động tăng dần, Tên là khác nhau, nhưng một số lần 2 Sitekey sẽ có cùng một thành phố.

Ví dụ:

1, A , CityA 
2, B, CityB 
3, C, CityA 
4, D, CityF 

vì vậy tôi cần phải loại bỏ hàng 3, và giữ hàng 1,2,4 chỉ.

của nó trên SQL 2005 trở lên.

cảm ơn sự giúp đỡ của bạn.

+1

Dưới đây là một liên kết đến một câu hỏi mà câu trả lời của bạn: http://stackoverflow.com/questions/18932/sql-how-can-i-remove-duplicate-rows –

Trả lời

12

Dưới đây là 2 cách để bạn có thể làm điều đó.

DELETE t 
FROM 
<table> t 
WHERE EXISTS 
    (SELECT 1 FROM <table> 
    WHERE t.SiteKey > SiteKey AND t.City = City) 


DELETE t 
FROM 
<table> t 
INNER JOIN <table> t2 
ON t.City = t2.City 
AND t.SiteKey > SiteKey 
+0

ví dụ tốt đẹp của việc sử dụng EXISTS – Chains

4

Đây là tiêu chuẩn SQL

DELETE 
    mytable 
WHERE 
    SiteKey NOT IN 
    (
    SELECT 
     MIN(SiteKey) 
    FROM 
     Mytable 
    GROUP BY 
     City 
    ) --Don't need 'KeepMe' 

Sau đó, thêm một hạn chế duy nhất

ALTER TABLE MyTable WITH CHECK ADD 
    CONSTRAINT UQ_MyTable_City UNIQUE (City) 
+0

Các tiêu chuẩn SQL không làm việc cho tôi trên truy vấn SQL 2005. –

+0

@Ken Le: "Không hoạt động"? Làm thế nào nó không hoạt động ... – gbn

+0

nvm, nhưng tôi đã thử sử dụng LEFT OUTER Tham gia và loại bỏ cột có null, công việc của nó ... Cảm ơn giúp đỡ của bạn tpp, gbn. Chúc một ngày tốt lành. –

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