23. oktober 1999 - 18:24Der 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';
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.
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.
(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
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?
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?
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...
Synes godt om
Ny brugerNybegynder
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.