Avatar billede pollas Nybegynder
23. oktober 1999 - 18:24 Der er 5 kommentarer og
1 løsning

SQL-spørgsmål - JOIN

I en database har jeg 3 tabeller. Den ene (Tilbud) indeholder forskellige oplysninger om tilbud brugerne selv har oprettet, bl.a. et felt (TilbudID), der definerer tilbuddet unikt, og to andre felter med brugeroplysninger (Bruger, Modtager). De to sidstnævnte indeholder div. adresseopysninger med mere.

Pointen er så, at jeg på en side lister alle tilbud og linker til en detalje-side med TilbudID som parameter. Det jeg gerne ville var, at vælge det relevante tilbud vha. af dette TilbudID (intet problem) OG hente de relevante brugeroplysninger samtidig udfra Bruger/Modtager-felterne i Tilbud. Alle tabeller har unikke ID-felter med navne, der fremgår af nedenstående.

Altså noget a la:

SELECT * FROM Tilbud WHERE TilbudID = 'parameter' OG SELECT * FROM Bruger WHERE UserID = 'Tilbud.Bruger' OG SELECT * FROM Modtager WHERE ID = 'Tilbud.Modtager';
Avatar billede rkb Nybegynder
23. oktober 1999 - 21:58 #1
Noget i den her stil:

SELECT Bruger.*, Tilbud.*, Modtager.*
FROM Modtager INNER JOIN (Bruger INNER JOIN Tilbud ON Bruger.BrugerID = Tilbud.BrugerID) ON Modtager.ModtagerID = Tilbud.ModtagerID;
?
Avatar billede pollas Nybegynder
23. oktober 1999 - 22:21 #2
Har jeg mulighed for at bruge INNER JOIN i en Access-base? Jeg er endvidere ikke helt sikker på, at jeg forstår dig helt.

Her er de relevante felter i de tre tabeller:

tilbud:
Bruger
Modtager
TilbudID

bruger:
UserID

modtager:
ID

Vil det være en fordel på en eller anden måde at sørge for at felterne hedder det samme? Jeg har en fornemmelse af, at jeg spørger lidt dumt, men jeg er ikke så kvik til SQL.
Avatar billede rkb Nybegynder
23. oktober 1999 - 22:51 #3
Ja til det med Inner Join i Access...

Det er en fordel at du ihvertfald angiver lidt mere sigende med felternes navne hvad det er, Fx.

Tilbud:
TilbudID <- PRIMARY KEY
BrugerID
ModtagerID

Bruger:
BrugerID <- PRIMARY KEY
Navn osv..

Modtager:
ModtagerID <- PRIMARY KEY
Navne osv..

(det er sikkert det samme du har lavet, bare du ikke kalder Bruger og Modtager for ID) det har ikke nogle praktisk indflydelse, det eneste du absolut er nødvendigt er at de felter der skal relateres er af samme type...

Hvis du vælger at bruge ens feltnavne, så skal du angive hvilken tabel de hver især er fra, som jeg brugte, altså Tilbud.BrugerID = Bruger.BrugerID
Avatar billede pollas Nybegynder
23. oktober 1999 - 23:59 #4
Jeg har rodet lidt med det, og har nu selv fundet frem til følgende:

sql = "SELECT * FROM Brugere, Tilbud, Modtager WHERE UserID = Modtager AND ID = Modtager AND TilbudID = 'parameter';"

Det lader til at virke, men hvori adskiller det sig fra dit? Jeg kunne forestille mig, at der var fordele ved din løsning, men jeg er ikke helt med på teorien. Er der evt. referencer til gode steder på nettet med mere om joins/inner joins?
Avatar billede pollas Nybegynder
24. oktober 1999 - 00:00 #5
Og hvordan klarer man at holde de releterede felter indefor samme datatype, hvis man gerne vil have Autonummerering af nogle af ID-felterne - som jeg sætter ind i de andre tabeller?
Avatar billede rkb Nybegynder
24. oktober 1999 - 12:09 #6
Altså den SQL du har lavet der, finder sikkert det samme resultat som min...

Og egentlig kan jeg ikke umildbar se / forklare hvad der gør den til en mindre god til det du vil have fra din database. Men jeg mener den meget hurtig kan blive uoverskuelig i kriterierne...

JOIN er ihvertfald den brugte form for at gøre det som du gør...

Derudover så kender jeg ikke nogle referencer på nettet, jeg har en bog :)
Men de findes sikkert...

mht. inden for samme datatype, så skulle jeg mene at TAL (heltal/integer) er samme datatype som autonummering, bare at ved autonum, at access ved at den selv skal holde styr på at tildele et nyt nr ved insert...
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