Avatar billede brynil Nybegynder
29. oktober 2004 - 21:06 Der er 8 kommentarer og
1 løsning

JOIN problem m/Access

Jeg har ikke helt forstået hvordan man nester flere tabeller med joins. Nedenstående er jeg kommet frem til nærmest ved en tilfældighed, men den fungere nu som den skal.
Imidlertid vil jeg gerne have vist et brugernavn oa fra yderligere en tabel, men kan ikke få det til at fungere. Min sql indtil videre ser således ud:

SELECT tblKommentar.KommentarTekst, tblEmne.EmneTekst
FROM tblKommentar

INNER JOIN (tblEmne
INNER JOIN tblKategori

ON tblKategori.KategoriID=tblEmne.EmneKategoriNr)
ON tblKommentar.KommentarEmneNr=tblEmne.EmneID

WHERE tblEmne.EmneID=[@A];

tblBrugere.BrugerNavn, som jeg bl.a. gerne vil have med, har også et UserID med relation til tblKommentar.KommentarBrugerNr.

Jeg ved ikke om der er oplysninger nok i det her, men sig endelig til hvis i mener i kan hjælpe.

Og sig også gerne til, hvis jeg er helt galt på fremgangsmåden.
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 21:11 #1
Måske sådan her:
SELECT kom.Kommentar, em.EmaneTekst, br.BrugerNavn
FROM tblKommentar AS kom, tblEmne AS em, tblKategori AS kat, tblBrugere AS br
WHERE
kat.KategoriID = em.EmneKategoriNr
AND
kom.KommentarEmneNr = em.EmneID
AND
br.UserID = kom.KommentarBrugerNr
AND
em.EmneID=[@A];
Avatar billede brynil Nybegynder
29. oktober 2004 - 21:22 #2
Nææh - den funker ikke. Den jeg selv er kommet frem til giver mig alle kommentarer på emnet [@A] samt emneteksten som jo skal være unik. Hvad jeg forsøger at opnå, er faktisk meget a la Exp. hér mht tilgængelige informationer.
Avatar billede brynil Nybegynder
29. oktober 2004 - 22:09 #3
Lader spm stå til imorgen og ser om nogen kan hjælpe.
Avatar billede eagleeye Praktikant
29. oktober 2004 - 22:43 #4
Prøv at lave den sådan her:


SELECT tblKommentar.KommentarTekst, tblEmne.EmneTekst, tblBrugere.BrugerNavn
FROM ((tblKommentar
INNER JOIN tblEmne ON tblKommentar.KommentarEmneNr = tblEmne.EmneID)
INNER JOIN tblKategori ON tblEmne.EmneKategoriNr = tblKategori.KategoriID)
INNER JOIN tblBrugere ON tblKommentar.KommentarBrugerNr = tblBrugere.userID
WHERE tblEmne.EmneID=[@A];




Hvis du har poster som ikke har et bruger id kan du evt rette sidste INNER JOIN til LEFT JOIN så denne linje:
INNER JOIN tblBrugere ON tblKommentar.KommentarBrugerNr = tblBrugere.userID

Bliver:
LEFT JOIN tblBrugere ON tblKommentar.KommentarBrugerNr = tblBrugere.userID
Avatar billede brynil Nybegynder
29. oktober 2004 - 23:52 #5
Det er helt perfekt eagleeye, du lever op til dit navn må jeg sige :-))

Kan du kort forklare forskellen på de 2 måder (min/din) sql er bygget op på. Måske det kommer med mere erfaring/forståelse men jeg har haft svært ved at finde forklarende beskrivelser af bl.a. joins, bortset fra de mere simple eksempler.
Avatar billede eagleeye Praktikant
30. oktober 2004 - 00:15 #6
I prinippet er der ikke den store forskel. Det er Access som forventer det med paranteser omkring som vist, når man får flere tabeller.
Avatar billede brynil Nybegynder
30. oktober 2004 - 00:25 #7
Ok, men jeg tænkte mere på, at mine joins er indlejret i hinanden, mens dine står hver for sig!
Avatar billede eagleeye Praktikant
30. oktober 2004 - 00:48 #8
Det er for at få ON til at passe med INNER JOIN ledet. tblBrugere skal JOIN'es på tblKommentar og ikke på tblEmne eller tblKategori.


Du kan også skrive det på denne måde hvor INNER JOIN imellem tblKommentar og tblBrugere er til sidst og de to andre JOIN er som du har vist:


SELECT tblKommentar.KommentarTekst, tblEmne.EmneTekst
FROM (tblKommentar

INNER JOIN (tblEmne
INNER JOIN tblKategori 

ON tblKategori.KategoriID=tblEmne.EmneKategoriNr)
ON tblKommentar.KommentarEmneNr=tblEmne.EmneID)

INNER JOIN tblBrugere
ON tblKommentar.KommentarBrugerNr = tblBrugere.userID

WHERE tblEmne.EmneID=[@A];
Avatar billede brynil Nybegynder
30. oktober 2004 - 07:36 #9
Fint nok, det gir' mig noget at gå videre med. Takker for hjælpen!
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
Kurser inden for grundlæggende programmering

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