Avatar billede bluegene Nybegynder
09. maj 2003 - 15:53 Der er 6 kommentarer og
1 løsning

Hvordan sletter jeg mine dubletter ?

Jeg står med et kæmpe problem, jeg har en database som indeholder en del poster, jeg skal så have checket om en post række med 2 navne findes mere end en gang og så slette den ene af disse hvis den findes eks 2 gange.
Avatar billede pierrehusted Nybegynder
09. maj 2003 - 15:56 #1
Den enkleste måde er at lave en ny tabel og så kopiere de gode poster over i den.

INSERT INTO nytabel (f1,f2,f3,f4,f5,f6)
SELECT DISTINCT f1,f2,f3,f4,f5,f6 FROM gammeltabel

Og så derefter tømme den gamle tabel og kopiere de gode poster tilbage

TRUNCATE TABLE gammeltabel

INSERT INTO gammeltabel (f1,f2,f3,f4,f5,f6)
SELECT f1,f2,f3,f4,f5,f6 FROM nytabel


Men det kræver at dit system kan tåle at tabellen er tom i et stykke tid.
Avatar billede dogg Nybegynder
09. maj 2003 - 15:56 #2
Der findes en SQL der kan gøre det, men kan selvfølgelig ikke lige huske hvad den hedder, finder den lige til dig
Avatar billede bjornicle Nybegynder
09. maj 2003 - 15:58 #3
Avatar billede bluegene Nybegynder
09. maj 2003 - 16:00 #4
pierrehusted > er ikke helt med nu *G* hvorfor skal det kopieres frem og tilbage kan jeg ikke se hvad det skal til for ? *SB*
Avatar billede pierrehusted Nybegynder
09. maj 2003 - 17:33 #5
Hvis du henter posterne med SELECT DISTINCT, så får du ingen dubletter. DISTINCT tager netop kun een forekomst.
Avatar billede janus_007 Nybegynder
12. maj 2003 - 15:12 #6
Når det nu er 200point værd, så har jeg lige bakset noget sammen som fjerner dubletter (hidtil uset fremgangsmåde, så pas godt på den ;O))

Jeg går i det flg. udfra at du har en primær nøgle på id, hvis ikke så vend tilbage så har jeg noget du lige skal tilføje :O)

Du skal ligeledes skifte feltnavnene ud med de som du gerne vil have unikke, i dit tilfælde er det vist allesammen, undtagen din id !

WHILE EXISTS(SELECT COUNT(*) FROM DinTabel GROUP BY f1, f2 HAVING COUNT(*) > 1)
BEGIN
DELETE DinTabel WHERE id IN (SELECT MAX(id) FROM DinTabel GROUP BY f1, f2 HAVING COUNT(*) > 1)
END


Håber du/ i kan bruge den :O)
Avatar billede bluegene Nybegynder
17. maj 2003 - 20:50 #7
janus_007 > det da et fantastisk scipt du har fået lavet der :)
klare det hele nemt og hurtigt ;)

Mange takker, sorry vente tiden :-/
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