03. marts 2005 - 09:41Der 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?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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å?
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.
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å.
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.