Toon posts:

ontdubbelen van een database

Pagina: 1
Acties:
  • 426 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een flinke database met een behoorlijk aantal dubbele (en tripele etc.) adressen. Als ik op het web zoek naar een macro of een scriptje om deze db automatisch te ontdubbelen krijg ik alleen maar commerci-ele partijen die dit voor mij willen doen. Doen we dus niet!

Nu ben ik te lui :P om zelf een paar regels te schrijven, maar dit moet toch standaard zijn? Wie heeft al zoiets op de virtuele plank liggen?

Het is een eenvoudige access-database met NAW-gegevens (en nog wel iets meer ook) die natuurlijk heel eenvoudig te converteren is naar excel.

Verwijderd

Je zou dit heel eenvoudig met wat sql kunnen doen...
Iets als
delete from "tabelnaam"
where "t.kolomnaam in
(Select "t.kolomnaam"
from "t.tabelnaam", x.tabelnaam"
where t.adres = x.adres);

Beetje prutsen, maar dan kom je er wel uit denk ik.

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 11-09 21:57
Dat kan een hele lastige klus zijn:

Als je op adres gaat controleren heb je volgende problemen:

Eerste Wal straat = 1e Walstraat
Burg. Hustinxstraat = Burgemeester Hustinxstraat
1A = 1-a
etc.

Wat je volgens mij beter kan doen, is ja/nee-veld 'wissen' aanmaken, tabel sorteren op postcode, tabel doorlopen en handmatig vinkjes zetten in die records die gewist mogen worden. Ten slotte een verwijderquery draaien.

Dat is wel even werk, maar dan is het wel goed.

Houdoe


  • Jrz
  • Registratie: Mei 2000
  • Laatst online: 16-09 23:56

Jrz

––––––––––––

1) update query die 1-a 1 a naar 1a omzet (makkelijk)
2) ontdubbel query draaien
3) query alles waar de straat ongeveer overeen komt

Ennnnnnnnnn laat losssssssss.... https://github.com/jrz/container-shell (instant container met chroot op current directory)


  • havana
  • Registratie: Augustus 1999
  • Laatst online: 16-09 14:19
Move > Programming

DIT IS MIJN WEBSITE


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Hoe deed ik dat ook weer ;)

Stel even dat je een tabel Adressen hebt, met daarin de primary Key ID, vervolgens de velden Naam, Adres, Woonplaats.

Select Naam, Adres, Woonplaats, count(ID) as Aantal from Adressen
Group by Naam, Adres, Woonplaats

Deze resultaattabel onthoud je dan even.

Delete from ResultaatTabel
Where Aantal=1

Snap je 'm?

Select max(A.ID) from Adressen A, ResultaatTabel R
Where A.Naam=R.Naam and A.Adres=R.Adres and A.Woonplaats=R.Woonplaats

Dit resultaat weer bewaren.

Delete from Adressen where ID in (Select ID from LaatsteResultaat)

Klaaros. (evt opnieuw doen als er nog steeds dubbelen zijn)

Siditamentis astuentis pactum.


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Das echt nie zo moeilijk, beste manier om adressen te ontdubbelen is uit te gaan van:
postcode
huisnummer
huisnummertoevoeging

Dus daar gewoon een distinct select op doen.

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Mmmmja.. zoals hierboven staat kan 't ook wel.

Select distinct je hele boeltje. Delete je originele tabel, en sla het resultaat op onder de originele naam.

Siditamentis astuentis pactum.


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Op woensdag 31 oktober 2001 13:37 schreef raptorix het volgende:
Das echt nie zo moeilijk, beste manier om adressen te ontdubbelen is uit te gaan van:
postcode
huisnummer
huisnummertoevoeging

Dus daar gewoon een distinct select op doen.
Bingo, postcode + volledig huisnummer is een volledige identifier voor je huis.

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 21:48
Op woensdag 31 oktober 2001 20:10 schreef The - DDD het volgende:

[..]

Bingo, postcode + volledig huisnummer is een volledige identifier voor je huis.
En als je nou in je database ontwerp mee had genomen dat dat een unique set moet zijn had je nooit dubbelen gehad.....

Verwijderd

Op woensdag 31 oktober 2001 13:37 schreef raptorix het volgende:
Das echt nie zo moeilijk, beste manier om adressen te ontdubbelen is uit te gaan van:
postcode
huisnummer
huisnummertoevoeging

Dus daar gewoon een distinct select op doen.
Geinige oplossing...
M'n bovenbuurman en ik wonen allebei op nummer 9 rood, in dezelfde straat. Wie ga je wissen?

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Dan wonen jullie samen.

En hij heeft het over adressen, dat is wat anders dan persoonsadressen.

Een adres = postcode, woonplaats, huisnummer (en straat).
Persoonsadres = een adres met daarnaast ook een persoon eraan verbonden.

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op woensdag 31 oktober 2001 23:25 schreef Afterlife het volgende:

[..]

Geinige oplossing...
M'n bovenbuurman en ik wonen allebei op nummer 9 rood, in dezelfde straat. Wie ga je wissen?
Ik zeg ook huisnummertoevoeging niet voor niets speciaal erbij, het is onmogelijk om exact zelfde nummer te hebben zonder toevoeging anders wordt het niet als een apart adres gezien.

Verwijderd

Topicstarter
Op woensdag 31 oktober 2001 23:16 schreef Jelmer Barhorst het volgende:

[..]

En als je nou in je database ontwerp mee had genomen dat dat een unique set moet zijn had je nooit dubbelen gehad.....
Ik krijg 'm aangeleverd. Sterker nog: ik krijg drie verschillende databases aangeleverd. Die moeten worden gemerged en vervolgens ontdubbeld.

Het gaat inderdaad om een persoonsadres, dus NAW-gegevens. De achternaam kan meegenomen worden bij het beoordelen of een adres dubbel opgenomen staat.

(ben het overigens niet eens met de move naar programming; mag ik dat zeggen? ;) Lijkt me typisch een office-probleem...)

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 11-09 10:38

Killemov

Ik zoek nog een mooi icooi =)

Zijn de definities van de 3 databases gelijk? Bevat een rij uit de ene db dezelfde data als de matchende rij uit de andere db? Of moet je gaten in de ene db dichten met data uit de andere?
Even best-case scenario (=simpelst): Er hoeft alleen op de key gefilterd te worden. Neem de grootste db (ik noem hem nu A) als basis. Verwijder alle rijen uit B die ook in A zitten. Voeg alle rijen in B toe aan A. Drop B. Verwijder alle rijen uit C die ook in A zitten. Voeg alle rijen in C toe aan A. Drop C. Klaar.Als je gaten wil gaan vullen, dan wordt het probleem een stuk ingewikkelder. Dan moet je per kolom op nulls (oid) gaan checken en data gaan overzetten.

Hey ... maar dan heb je ook wat!


Verwijderd

Topicstarter
Op donderdag 01 november 2001 17:21 schreef Killemov het volgende:
Zijn de definities van de 3 databases gelijk? Bevat een rij uit de ene db dezelfde data als de matchende rij uit de andere db? Of moet je gaten in de ene db dichten met data uit de andere?
Even best-case scenario (=simpelst): Er hoeft alleen op de key gefilterd te worden. Neem de grootste db (ik noem hem nu A) als basis. Verwijder alle rijen uit B die ook in A zitten. Voeg alle rijen in B toe aan A. Drop B. Verwijder alle rijen uit C die ook in A zitten. Voeg alle rijen in C toe aan A. Drop C. Klaar.Als je gaten wil gaan vullen, dan wordt het probleem een stuk ingewikkelder. Dan moet je per kolom op nulls (oid) gaan checken en data gaan overzetten.
Het is eerder worst case: de drie databases zijn geen van alle gelijk qua opzet:
- twee hebben er voornamen en -letters (in een aparte kolom), 1 alleen voorletters
- twee hebben het huisnummer in een aparte kolom, 1 heeft het huisnummer in de kolom van de straatnaam
- 1 heeft een aparte kolom voor huisnummertoevoegsel.
- sommige gegevens ontbreken, maar _nooit_ achternaam, straatnaam/huisnummer en woonplaats.

Al met al kun je heel druk zijn met het ontdubbelen van een in essentie simpel maar omvangrijk bestand. |:(

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 11-09 10:38

Killemov

Ik zoek nog een mooi icooi =)

Dus ik neem aan dat je kolommen op gaat vullen. In ieder geval heb je dus wel de gemene deler van alledrie de tabellen. (achternaam, straatnaam/huisnummer en woonplaats.) Je maakt dus een nieuwe tabel met daarin alle kolommen die je hebben wil. Je kunt het beste de meest specifieke kolommen gebruiken. (Dus straatnaam en huisnummer apart, of je dan ook een eventuele letter apart neemt ...)

Hey ... maar dan heb je ook wat!

Pagina: 1