Avatar billede avalon116 Nybegynder
03. marts 2005 - 09:41 Der er 4 kommentarer og
1 løsning

left join problem

Jeg har en tabel, hvor jeg gerne vil påføre nogle oplysninger fra en anden tabel til nogle af felterne. Jeg skal have alle felterne med fra Tabel 1 og så skal der til nogle af felterne være nogle oplysninger fra Tabel 2. Derfor bruger jeg "Left join" fra Tabel 1 til Tabel 2 på nogle felter, som de to tabeller har til fælles.

Jeg kan bare ikke forstå, at resultatet bliver, at den ikke har alle felterne fra Tabel 1 med. Den udelader nogle af felterne og jeg kan ikke finde nogen logik i det. Nogen der har ideer eller forslag?
Avatar billede terry Ekspert
03. marts 2005 - 09:48 #1
can we see some SQL and maybe some table information (fields, relations etc.)
Avatar billede avalon116 Nybegynder
03. marts 2005 - 10:15 #2
Den forespørgsel jeg har problemer med ser sådan ud:

SELECT qTilNyeBoliger.*, qFraNyeBoliger.qtIndivid.Type, qFraNyeBoliger.Alder_3112, qFraNyeBoliger.Alder, qFraNyeBoliger.Køn
FROM qTilNyeBoliger LEFT JOIN qFraNyeBoliger ON (qTilNyeBoliger.År = qFraNyeBoliger.År) AND (qTilNyeBoliger.Pri_Side = qFraNyeBoliger.Pri_Side) AND (qTilNyeBoliger.Pri_Etage = qFraNyeBoliger.Pri_Etage) AND (qTilNyeBoliger.Pri_Bogstav = qFraNyeBoliger.Pri_Bogstav) AND (qTilNyeBoliger.Pri_Husnr = qFraNyeBoliger.Pri_Husnr) AND (qTilNyeBoliger.Pri_Vejkode = qFraNyeBoliger.Pri_Vejkode) AND (qTilNyeBoliger.Alder_3112 = qFraNyeBoliger.Alder_3112) AND (qTilNyeBoliger.Køn = qFraNyeBoliger.Køn)
ORDER BY qTilNyeBoliger.Pri_Vejkode, qTilNyeBoliger.Pri_Husnr, qTilNyeBoliger.Pri_Bogstav, qTilNyeBoliger.Pri_Etage;


Som du kan se bygger den på to andre forespørgsler. Disse to forespørgsler er lavet på helt samme måde udfra de samme tabeller. Blot udvælges efter forskellige kriterier. I qTilNyeBoliger vælges alle de adresser på nye boliger hvor der er personer, der er flyttet til en ny bolig i qFraNyeBoliger vælges tilsvarende de der er flyttet fra en ny bolig. I den forespørgsel du kan se herover vil jeg gerne vise alle de adresser på nye boliger hvor der er personer, der er flyttet til (dvs identisk med qTilNyeBoliger) men jeg vil gerne have et par ekstra felter på, hvis personen i det samme årstal er fraflyttet boligen.

Det jeg ikke forstår er, at den ikke medtager alle poster fra qTilNyeBoliger, når jeg udelukkende bruger LeftJoin. Men det er måske for mange felter jeg joiner på?
Avatar billede terry Ekspert
03. marts 2005 - 12:36 #3
When you use an OUTER Join (LEFT or RIGHT) then it means that you want to see records on one side of the JOIN and if possible (records exist) on the other side of the join.

So it is possible that there are no related records on the OUTER side which will mean that fields are empty. You can have more than one field in the JOIN but it also means that all fields are used to find related records. If only one of them is empty then the OUTER fields will be empty.

I suggest that you look at each query in turn to make sure that they give the required result. Then build your query up a stage at a time so that you can verify that what you are doing does work.
Avatar billede avalon116 Nybegynder
03. marts 2005 - 14:19 #4
Sådan regnede jeg også med at det skulle være. Jeg er med på, at der kun vil være blanke felter fra Tabel 2, for de poster, hvor der ingen relation er. Men jeg kunne ikke forstå, at der kan være færre poster i en forespørgsel med LeftJoin end i den oprindelige Tabel 1.

Men måske er det fordi den ikke medtager de poster, hvor der ingen værdier er i de joinede felter. Jeg mener dog ikke at der er sådanne tomme felter, men måske er det der den ligger. Kigger jeg lige på.
Avatar billede avalon116 Nybegynder
14. marts 2005 - 09:08 #5
lukker lige
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