Avatar billede bodil_bruun Nybegynder
22. marts 2001 - 09:59 Der er 12 kommentarer og
1 løsning

join -udvidet left join

Jeg har tre tabeller.
1. tabel med id1, navn, adresse, osv
2. tabel med id2, data, osv
3. tabel der er en relation mellem de to øvrige med id, id1, id2 osv.
Nu vil jeg lave en forespørgsel hvor jeg henter ALLE poster fra tabel 1, og i de tilfælde at der er noget indhold i talbel 2, skal det også med.
Jeg får kun de poster, der har indhold i både tabel 1 og 2. Har prøvet at rette inner join til left join, men access protesterer.
22. marts 2001 - 10:00 #1
prøv at indsætte SQL\'en her...
Avatar billede bodil_bruun Nybegynder
22. marts 2001 - 10:10 #2
tak thomas - men hvilken SQL ?
22. marts 2001 - 10:17 #3
Den forespørgsel, som du forsøger at sende afsted.
I forespørgselsdesign, kan vælge menuen Vis->SQL-visning.
Så ser du den rene SQL, som du så kan kopiere ind her :-)
Avatar billede bodil_bruun Nybegynder
22. marts 2001 - 10:25 #4
Uha - der viste jeg, at jeg ikke kan læse indenad.
Her er min sætning
SELECT Entity.Id, Entity.Name, Entity.Address1, Membership.MembershipName
FROM Membership INNER JOIN (Entity left JOIN MemberShipEntityRelation ON Entity.Id = MemberShipEntityRelation.EntityID) ON Membership.ID = MemberShipEntityRelation.MembershipID;
22. marts 2001 - 10:27 #5
Hvilken fejlmeddelelse får du?
22. marts 2001 - 10:40 #6
Hej Bodil,

Jeg har lidt svært ved at gennemskue det, når jeg ikke kender datatyper og felter i tabellerne.
Men jeg ved, at Access ofte kræver at man bruger Left-joins hele vejen gennem alle tabeller. Dvs, hvis du bruger left-join mellem 2 af tabellerne, så skal du også have det mellem de 2 sidste. Og de skal pege samme vej....
Har du prøvet det?

/Thomas
Avatar billede bodil_bruun Nybegynder
22. marts 2001 - 10:42 #7
Joinudtrykket understøttes ikke.
Hvis jeg erstatter min left join med inner join, accepterer access det. Men så får jeg kun de poster fra tabel 1(entity) som har data i tabel 2.(membership)
Avatar billede bodil_bruun Nybegynder
22. marts 2001 - 10:47 #8
Hej Thomas.
Jeg kan ikke gennemskue det. Men jeg har prøvet at erstatte begge joins med left joins og får igen besked om at joinudtrykket ikke understøttes.
bodil
Avatar billede moses Praktikant
22. marts 2001 - 10:53 #9
HVis jeg forstår dig rigtigt, så indeholder tabel 1 personer og tabel 2 indeholder data omkring personen.
Hvordan er relationen:
1. Der er kun 1 record i tabel 2, der passer til en person i tabel 1.
2. Der er mange records i tabel 2, der passer til en person i tabel 1.

Og desuden
3. Kan samme record i tabel 2 passe til mere end én person i tabel 1.


Hvis det er sådan, at mange records i tabel 2 passer til en og kun en person i tabel 1, så skal du ikke benytte tabel 3 !!!
Da skal du istedet lave et felt i tabel 2, der angiver ID for personen fra tabel 1.
OG så skal du benytte en simpel LEFT Join imellem de to tabeller, så alle personer (der opfylder evt. kriterier) vises og eventuelle data fra tabel 2, der passer til disse personer, vises.
Avatar billede bodil_bruun Nybegynder
22. marts 2001 - 11:03 #10
Her er mine tabeller med datatyper. Og det er sådan at mange fra tabel 1 har relationer til mange fra tabel 2, så jeg kan vel ikke undvære tabel 3 ?

tabel et hedder Entity og indeholder:
Id - langt heltal
Name - text
Address1  - text

Tabel to hedder Membership og indeholder:
id - langt heltal
MembershipName - text

Tabel tre hedder MemberShipEntityRelation og indeholder
ID - langt heltal
EntityID - langt heltal
MembershipID - langt heltal
Avatar billede moses Praktikant
22. marts 2001 - 11:17 #11
SELECT Entity.Id, Entity.Name, Entity.Address1, Membership.MembershipName
FROM Membership RIGHT JOIN (Entity LEFT JOIN MemberShipEntityRelation ON Entity.Id = MemberShipEntityRelation.EntityID) ON Membership.ID = MemberShipEntityRelation.MembershipID;
Avatar billede bodil_bruun Nybegynder
22. marts 2001 - 12:07 #12
Mange tak til Moses
bodil
Avatar billede moses Praktikant
22. marts 2001 - 12:22 #13
I lige måde  ;-)
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