Avatar billede dsjk Novice
10. november 2005 - 14:38 Der er 10 kommentarer og
2 løsninger

inner join - medtager ikke blanke

Hej

Jeg har 2 tabeller som næsten indeholder de samme oplysninger.
Tbl. 1:
t_adr_indsendt - indeholder de adresser der er modtaget

tbl. 2:
t_adr_vask - indeholder de samme adresser dog med rettelser

Jeg skal så have en forespørgsel der viser hele t_adr_indsendt og nogle udvalgte felter fra t_adr_vask.
Det er ikke noget problem, men...

Der er 3 felter i de 2 tabeller der altid er ens, og jeg vil sikre at tabellerne joines på disse og har derfor flg. query

SELECT t_adr_indsendt.Abonnent_nr, t_adr_indsendt.Fornavn, t_adr_indsendt.Efternavn, t_adr_indsendt.Gadenavn, t_adr_indsendt.Husnr, t_adr_indsendt.Husbogstav, t_adr_indsendt.Etage, t_adr_indsendt.Placering, t_adr_indsendt.Stednavn, t_adr_indsendt.Postnr, t_adr_indsendt.Postboksnr, t_adr_indsendt.Adressenr, t_adr_indsendt.CO_Navn, t_adr_indsendt.Adresseringsnavn, t_adr_indsendt.Landekode, t_adr_indsendt.Bynavn, t_adr_indsendt.fil_nr, t_adr_vask.Abonnent_nr, t_adr_vask.Fornavn, t_adr_vask.Efternavn, *
FROM t_adr_vask INNER JOIN t_adr_indsendt ON (t_adr_vask.Abonnent_nr = t_adr_indsendt.Abonnent_nr) AND (t_adr_vask.Fornavn = t_adr_indsendt.Fornavn) AND (t_adr_vask.Efternavn = t_adr_indsendt.Efternavn);

men problemet er at feltet efternavn i nogle tilfælde er blank i begge tabeller og det medfører at disse ikke medtages. Jeg får altså kun de poster hvor der står noget i alle 3 join felter...

Skal lige siges at jeg ved ikke om queryen kan laves på en bedre måde end jeg har forsøgt.

Men hvordan får jeg den til også at medtage de poster hvor efternavn er blank?

/dsjk
Avatar billede terry Ekspert
10. november 2005 - 14:41 #1
change INNER JOIN to an OUTER (LEFT or RIGHT)
Avatar billede terry Ekspert
10. november 2005 - 14:42 #2
in your querty right clicl on the thin line (realationship) and then choose the on ewhich gives you the data you want. This will give you an OUTER JOIN
Avatar billede dsjk Novice
10. november 2005 - 14:57 #3
ok, virker næsten...

Nu tager den godt nok dem med blank efternavn med, men i de tilfælde det er blank sættes abonnent_nr og fornavn også til blank i t_adr_indsendt

SELECT t_adr_indsendt.Abonnent_nr, t_adr_indsendt.Fornavn, t_adr_indsendt.Efternavn, t_adr_indsendt.Gadenavn, t_adr_indsendt.Husnr, t_adr_indsendt.Husbogstav, t_adr_indsendt.Etage, t_adr_indsendt.Placering, t_adr_indsendt.Stednavn, t_adr_indsendt.Postnr, t_adr_indsendt.Postboksnr, t_adr_indsendt.Adressenr, t_adr_indsendt.CO_Navn, t_adr_indsendt.Adresseringsnavn, t_adr_indsendt.Landekode, t_adr_indsendt.Bynavn, t_adr_indsendt.fil_nr, t_adr_vask.Abonnent_nr, t_adr_vask.Fornavn, t_adr_vask.Efternavn, t_adr_vask.Gadenavn, t_adr_vask.Husnr, t_adr_vask.Husbogstav, t_adr_vask.Etage, t_adr_vask.Placering, t_adr_vask.Stednavn, t_adr_vask.Postnr, t_adr_vask.Postboksnr, t_adr_vask.Adressenr, t_adr_vask.CO_Navn, t_adr_vask.Adresseringsnavn, t_adr_vask.Landekode, t_adr_vask.Bynavn, t_adr_vask.gruppe
FROM t_adr_vask LEFT JOIN t_adr_indsendt ON (t_adr_vask.Efternavn = t_adr_indsendt.Efternavn) AND (t_adr_vask.Fornavn = t_adr_indsendt.Fornavn) AND (t_adr_vask.Abonnent_nr = t_adr_indsendt.Abonnent_nr)
WHERE (((t_adr_vask.gruppe) Is Null));

/dsjk
Avatar billede terry Ekspert
10. november 2005 - 15:01 #4
all fields where there is no related record will be empty.
Avatar billede dsjk Novice
10. november 2005 - 15:06 #5
Abonnent_nr, fornavn og efternavn er ens i begge tabeller, men er efternavn blank (også i begge) bliver alle 3 felter blanke i t_adr_indsendt men er udfyldt i t_adr_vask.
Avatar billede dsjk Novice
10. november 2005 - 15:07 #6
hmm, ja det er alle felter fra t_adr_indsendt der bliver blanke når efternavn er blank
Avatar billede terry Ekspert
10. november 2005 - 15:14 #7
an inner join shows records from tables where there are realted records in both tables. An outer join (left or right) will also show records when ther is no related data in the other table.
Avatar billede ldanielsen Nybegynder
10. november 2005 - 18:19 #8
Du har bestemt at du vil have alle poster fra t_adr_vask, og de relaterede poster fra t_adr_indsendt hvis der er nogen.

Access kan jo ikke vise dig værdierne af felterne fra t_adr_indsendt, hvis posten ikke findes
Avatar billede kjulius Novice
10. november 2005 - 20:21 #9
Du skal være opmærksom på, at felter som er null (altså ikke udfyldt) ikke bliver knyttet sammen. De eksisterer principielt slet ikke (eller har ingen data).

Det kan derfor være en ide på din ON sætning at omdanne en Null værdi til f.eks. en enkelt space, således at de kan knyttes sammen alligevel. Det kan man gøre med en IIf funktion:

FROM t_adr_vask LEFT JOIN t_adr_indsendt
  ON (Iff(t_adr_vask.Efternavn Is Null, ' ', t_adr_vask.Efternavn) = IIf(t_adr_indsendt.Efternavn Is Null, ' ', t_adr_indsendt.Efternavn)) AND (t_adr_vask.Fornavn = t_adr_indsendt.Fornavn) AND (t_adr_vask.Abonnent_nr = t_adr_indsendt.Abonnent_nr)
Avatar billede dsjk Novice
11. november 2005 - 08:49 #10
super.

kjulius, ligger du et svar så deler du pointene med terry
Avatar billede kjulius Novice
11. november 2005 - 14:52 #11
Takker...
Avatar billede terry Ekspert
11. november 2005 - 19:50 #12
tak og god weekend til alle
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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