pierre > Ser ud til at "MemberID" eller "Tekst" er ens, men INdekz er unikt (ellers ikk PK)
Men du kan vel lave en cursor der bøber gennem en liste af dublet-memberIDer, og sletter dem med MenberID = den cursoren står på, og Indexz > end den første
sitg3's forslag er også rimelig nemt... Og bagefter kan man jo bare slette indholdet i den oprindelige tabel, og flytte de tilbageblevne records tilbage i den.
(Og sætte "MemberID" og "Tekst" unikt hvis de skal være unikke!)
Jeg er lidt i tvivl om den query der finder dupletterne, men ellers skulle dette virke. (Lad være med at køre det hvis du ikke har en backup af data...) -------------------------------- DECLARE delete_cursor CURSOR FOR DECLARE @memberId varchar(10) DECLARE @PK bigint DECLARE @tkst varchar(50) DECLARE @cnt int
-- find dupletter SELECT distinct memberId, [Text], count(memberId) as dubcount FROM [myTable] WHERE dubcount > 1 group by memberId, [Text];
OPEN delete_cursor
-- Perform the first fetch. FETCH NEXT FROM delete_cursor
-- Check @@FETCH_STATUS to see if there are any more rows to fetch. WHILE @@FETCH_STATUS = 0 BEGIN -- This is executed as long as the previous fetch succeeds. FETCH NEXT FROM delete_cursor INTO @memberId, @tkst, @CNT
SELECT @PK = indekz from [table] where memberId=@memberId and [text]=@tkst delete from [table] where memberId=@memberId and [text]=@tkst and Indekz != @PK END
CLOSE delete_cursor DEALLOCATE delete_cursor GO ---------------------------------
just4fun>>> Nu har du da lige genopfundet et join?!?
Hvad emd
DELETE FROM mintabel WHERE indekz IN ( SELECT t1.indekz FROM mintabel t1, mintabel t2 WHERE t1.MemberID = t2.MemberID AND t1.Text = t2.Text AND t1.Amount = t2.Amount )
Thats it.
P.S. Som just4fun skriver: kør den kun hvis du har taget en backup først!
Der er en hage ved min løsning: den sletter alle poster hvor der er mere end én forekomst af samme data. Mao. den sletter ikke alene "dubletterne", men også "originalerne". Det kan undgås ved at indføre en lille betingelse:
DELETE FROM mintabel WHERE indekz IN ( SELECT t1.indekz FROM mintabel t1, mintabel t2 WHERE t1.MemberID = t2.MemberID AND t1.Text = t2.Text AND t1.Amount = t2.Amount AND t1.indekz > t2.indekz )
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.