Avatar billede dargny Nybegynder
20. december 2004 - 10:32 Der 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?
Avatar billede arne_v Ekspert
20. december 2004 - 10:46 #1
Er der andre felter i tabellen ? Hvis ja - hvilken række skal man så vælge ?
Avatar billede dargny Nybegynder
20. december 2004 - 10:54 #2
Ja, der er et felt til. Dokumentnummer, som er nummereret forskelligt, men indeholder det samme og derfor sagtens kan slettes.

ESS 20041201    DOC123
ESS 20041201    DOC234
ESS 20041201    DOC345

selv om dokumentnumret er forskellig, så kan de 3 rækker godt trimmens ned til 1.
Avatar billede trer Nybegynder
20. december 2004 - 11:26 #3
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.
Avatar billede dargny Nybegynder
20. december 2004 - 12:07 #4
Findes der ikke en måde at rydde op uden at skulle flytte frem og tilbage?
Avatar billede janus_007 Nybegynder
20. december 2004 - 12:51 #5
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)
Avatar billede dargny Nybegynder
06. oktober 2009 - 12:03 #6
luk
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester