20. december 2004 - 10:32Der er
5 kommentarer og 1 løsning
Sletning af dupletter
Jeg har en database indeholdende ca. 10 millioner rækker. Mange af dem er dubletter og kan slettes. For at gøre forklaringen nemmere vil jeg lave noget test for jer;
Bruger Dato ESS 20041201 ESS 20041201 ESS 20041201 YSA 20041201 BBB 20041201 BBB 20041201 BBB 20041202
Hvordan får jeg ryddet op i ovenstående så der kun er en post pr bruger+dato?
Det nemmeste er, at du trækker alle data over i en ny tabel via en select group by på bruger / dato og en subselect på dokumentnummer da du er ligeglad hvilket du får.
Hvis dit dokumentnummer ikke er unikt kan du tilføje en ekstra kolonne, og så gøre flg.
Denne her viser dig alle de records som der skal slettes:
select t.* from Tabel1 t left outer join ( select min(id) as id, bruger, dato from Tabel1 group by bruger, dato) as o on o.id = t.id where o.id is null
Her regner jeg med at du har en unik ID i din tabel, ellers kan du bruge dokumentnummer - men altså kun hvis dette er unikt!! Ellers må du tilføje en id!
Så kan du evt. lave en delete join eller bare en simpel subselect der sletter de id'er som ovenstående select giver dig.
Hvis du har brug for en ekstra kolonne med id, så gør sådan her: alter tabel Tabel1 add id identity(1,1)
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.