Avatar billede _et Praktikant
20. april 2004 - 14:08 Der er 10 kommentarer og
2 løsninger

Query der sletter dubletter.

Kan jeg lave en query, som jeg kan køre på min mySQL db, der sletter dubletter.

Det er et kundekartotek, og jeg ønsker at teste på "adresse + tlf", og hvis en af dem er ens, så skal den ene kunde slettes.

Hvis det er muligt at vælge at slette den af posterne der har mindst info, så ville det være fedt.
Avatar billede _et Praktikant
20. april 2004 - 16:21 #1
Kan det overhovdet lade sig gøre?
Avatar billede teepee Nybegynder
21. april 2004 - 10:05 #2
Den er ikke helt let, men for at hjælpe dig lidt på vej, så start med at finde dubletter:

select count(id), min(id), adresse, tlf
from kundekartotek
group by adresse, tlf
having count(id) > 1
Avatar billede _et Praktikant
21. april 2004 - 12:52 #3
Hvad retunerer din query præcis

Jeg har lavet en DB med 4 poster, hvor der er ens forekomster ( tlf+adresse og tlf/adresse )

men når jeg kører den query, retuneres ingen poster? det var måske ikke meningen?
Avatar billede teepee Nybegynder
21. april 2004 - 13:56 #4
Det kommer jo også lidt an på din database, men adresse og tlf skal jo være nøjagtigt ens...er de det?
Avatar billede _et Praktikant
21. april 2004 - 18:23 #5
Posterne har ens adresse og tlf felter, og af samme type
se her: http://roskvist.net/exp/query.JPG

Som du kan se på det vindue, der ligger "bagved", så retuneres et "Empty set"
Avatar billede _et Praktikant
21. april 2004 - 18:26 #6
Nu så jeg lige at du bruger ordet "id". Jeg har et felt, som hedder "id", er det et problem??

Er id et reseveret ord?

Jeg har før prøvet, at hvis man har et felt, der hedder "by", så giver det et problem, pga. DK/UK betydning?
Avatar billede teepee Nybegynder
22. april 2004 - 14:39 #7
Kan du også vise mig data?
Avatar billede _et Praktikant
23. april 2004 - 20:23 #8
Avatar billede teepee Nybegynder
24. april 2004 - 11:17 #9
du må lave en group by på et af felterne ad gangen, hvis der ikke må være dubletter på enkeltfelter. Jeg foreslår at du starter med tlf:

select count(id), min(id), tlf
from kundekartotek
group by tlf
having count(id) > 1
Avatar billede _et Praktikant
24. april 2004 - 23:26 #10
Nu fik jeg et svar. :-)

Kan du forklare lidt om hvad det er den retunerer?

Count(id)  - er vel altallet af foreomster
men hvad er min(id) ??

Kan jeg bruge det resultat til at sammenligne med en tilsvarende query på adresse?
Avatar billede teepee Nybegynder
26. april 2004 - 10:44 #11
Når du skal tælle antallet, alltså en gruppefunktion kan du ikke bare vise id ved siden af, idet at den jo skifter for hver række. Ved at tage min() altså minimum af id, får du vist antallet sammen med den mindste id. Denne kan du jo så vælge IKKE at slette. Så du kan slette alle andre rækker med min(id)'s kvalifikationer, eks. tlf, men IKKE denne id.

delete from kundekartotek
where tlf = (select tlf from kundekartotek where id = xxx)
and id <> xxx
Avatar billede _et Praktikant
16. juli 2004 - 20:36 #12
Jeg syntes dette er Meget svært. :-)

Jeg tror jeg laver en funktion i mit program, der kan gøre det, det tror jeg, at jeg nemmere kan styre.

MEN, jeg siger tak for det Meget gode forsøg.

Mvh. Teddy
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