Pitney Bowes

Den danske PB Software blog

Opdater kolonne kan nulstille værdier i en kolonne

by Peter Horsbøll Møller | 25. August 2015 | 2 kommentarer

Peter Schack Madsen fra Aarhus Kommune kontaktede mig med et problem han var stødt på i MapInfo Pro.

Peter havde bemærket at opdater kolonne kan nulstille værdier i en kolonne. Han havde bemærket at problemet opstod, når han ønskede at opdatere en kolonne i en tabel med værdier fra en anden tabel, hvor den anden tabel ikke indeholdt alle de poster, som også fandtes i den tabel han opdaterede.

Det er en meget god observation, som hænger meget godt sammen med den måde som opdater kolonne funktionen fungerer i MapInfo Pro – i al fald når man opdaterer en tabel med værdier fra en anden tabel.

Lad os se lidt på hvorfor det sker.

I mit eksempel har jeg en tabel med målere, hvor i jeg registrere den seneste aflæsning. Aflæsninger kommer løbende og indeholder kun en delmængde af alle de målere jeg har i måler-tabellen. Hvis jeg anvender nedenstående metode, vil alle de målere, som ikke findes i min tabel med aflæsninger, blive nulstillet. Og det ønsker jeg ikke.

Opdater kolonne Eksisterende kolonne

 

Jeg vil her illustrere, hvad der sker ved at tilføje en midlertidig kolonne til tabellen i stedet for at opdatere en eksisterende kolonne.

Jeg udfylder dialogboksen Opdater kolonne på denne måde. Jeg forbinder de to tabeller via ID-kolonnerne.

Opdater kolonne Ny midlertidig kolonne

I billedet nedenfor ser vi resultatet. Jeg har markeret det interessant med et rødt rektangel. De to sidste poster viser værdien 0 i feltet Aflæsning.

Opdater kolonne Ny kolonne

Hvis jeg nu opdaterer min tabel og opdaterer kolonnen SENESTE_AFLÆSNING med værdierne fra kolonnen AFLÆSNING, vil de to sidste poster blive tildelt værdien 0.

Forklaringen på dette skal findes i den måde, MapInfo Pro “joiner” de to tabeller. Normalt anvender MapInfo Pro en simpel “inner join” til at joine to tabeller. Men med Opdater kolonne anvendes en “left outer join”. Det betyder med andre ord, at alle poster fastholdes i den tabel, der skal opdateres. Hvis der ikke er fundet en post i tabellen, som værdierne skal læses fra, tildeler MapInfo Pro posten værdien 0.

Det er smart, når man anvender det til at tilføje en (dynamisk) ny kolonne. Men det er måske ikke så smart, hvis man ønsker at anvende det til at opdatere en eksisterende kolonne. Det har i al fald den sideeffekt, at nogle poster risikerer at blive “nulstillet”.

Alternativ metode

Heldigvis findes der en alternativ metode til at opdatere kun de poster der matcher hinanden. Metoden kræver blot, at man først joiner de to tabeller sammen og derefter opdaterer resultat-tabellen.

Lad os starte med at joine de to tabeller via SQL-valg. Jeg har her valgt alle kolonner fra den ene tabel men kun den ene kolonne fra den anden tabel, nemlig den jeg ønsker at læse værdien fra.

Joine tabeller

Resultat vil se således ud. Bemærk at resultat-tabellen kun indeholder de poster, som matcher hinanden.

Join to tabeller inden opdatering

Nu kan jeg med Opdater kolonne opdatere resultat-tabelles kolonne SENESTE_AFLÆSNING med værdierne fra kolonnen AFLÆSNING.

Opdater kolonne via Joinede tabeller

 

Nu er posterne i tabellen Målere, der havde et match i tabellen med aflæsninger, blevet opdateret med værdien fra kolonnen AFLÆSNING. De poster, der ikke havde et match, fastholder deres eksisterende værdi og bliver altså ikke længere nulstillet.

 

Please observe our community guidelines when posting comments.

This blog is hosted by Pitney Bowes Inc. By using this blog you agree that you are solely responsible for any comment you post to the Blog and you agree to abide and be bound by the Pitney Bowes TERMS OF USE.

Please stay on topic. We may redirect certain submissions if they are better handled through another channel such as customer service. With regard to the content of any submissions you make through this Blog, you agree to remain solely responsible and agree to not submit materials that are unlawful, defamatory, abusive or obscene. You also agree that you will not submit anything to this Blog that violates any right of a third party, including copyright, trademark, privacy or other personal or proprietary rights.

Pitney Bowes reserves the right to terminate your ability to use and/or submit posts to this Blog. Pitney Bowes may not review all postings and is not responsible for comments posted on this Blog. Pitney Bowes nevertheless retains the right to not post, edit a posting or to remove any postings in its sole and absolute discretion.

  • Laura

    Tak for gennemgang af denne metode. Jeg har nu prøvet det, men får ikke mulighed for at vælge noget Query under “Opdater tabel” i “Opdater kolonne” boksen. Hvad gør jeg mon forkert?

    • http://blogs.pitneybowes.dk/pbsoftware/blog/ Peter Horsbøll Møller

      Hej Laura, det kan være din “Query-n” vises som “Selection”. Alternativt kan problemet være, at du har navngivet dit resultat i din forespørgsel