2011-07-21 18 views
11

Możliwe duplikaty:
SQL - How can I remove duplicate rows?TSQL Usunąć zduplikowane wiersze na niektóre kolumny tylko

Przykład to mój stół:

SiteKey, Nazwisko, Miasto

SiteKey to auto inkrementacja, Nazwa jest inna, ale czasami 2 Sitekey będzie miał to samo miasto.

przykład:

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

więc trzeba usunąć wiersze 3 i utrzymanie rzędy 1,2,4 tylko.

to na SQL 2005 i nowszych.

dziękuję za pomoc.

+1

Oto link do odpowiedzi na pytanie, które je: http://stackoverflow.com/questions/18932/sql-how-can-i-remove-duplicate-rows –

Odpowiedz

12

Oto 2 sposoby można to zrobić.

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

ładny przykład korzystania z EXISTS – Chains

4

Jest to standardowy SQL

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

Następnie dodać unique

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

Standard SQL nie jest dla mnie w zapytaniu SQL 2005. –

+0

@Ken Le: "Nie działa"? Jak to działa ... – gbn

+0

nvm, ale próbowałem użyć LEWEGO ZEWNĘTRZNEGO Dołącz i usuń kolumnę ma zero, jej praca ... Dzięki twojej pomocy tpp, gbn. Miłego dnia. –

Powiązane problemy