24. maj 2003 - 15:39Der er
11 kommentarer og 2 løsninger
Relationer - sikkert nemt !
Jeg har 2 tabeller:
OPGAVER opgaveID firma adresse bla bla bla sælger opgaveAnsvarlig
PERSONER personID navn
I felterne sælger & opgaveAnsvarlig ønsker jeg blot at skrive personID fra tabellen PERSONER på den respektive person. Men det betyder jo at jeg måske laver henvisning til 2 forskellige personer i PERSONER tabellen.
Hvordan laver jeg nu mit SQL kald fra min ASP side således at jeg får det korrekte navn med fra PERSONER tabellen tilknyttet henholdsvis feltet sælger & opgaveAnsvarlig ???
Skal jeg oprette nogle relationer i Access databasen først eller kan det ganske enkelt gøres med den rigtige SQL konstruktion ???
Så vidt jeg har forstået vil du have at En opgave kan have flere personer involveret og En person kan have flere opgaver kørende samtidigt
Hvis det er det du er ude efter skal du gøre flg.: 1. Drop feltet opgaveAnsvarlig 2. Opret en ny tabel med to primære felter; "PersonId" og "OpgaveId" 3. Nu kan du lave et SQL-udtræk der ser sådan ud:
SELECT PERSONER.navn, OPGAVER.firma, OPGAVER.adress, ....... FROM PERSONER INNER JOIN (OPGAVER INNER JOIN MyLinkTable ON OPGAVER.id = MyLinkTable.PersonId) ON PERSONER.id = MyLinkTable.OpgaveId
Lad mig lige prøve at omformulere lidt - bare for at være 100% sikker på I har forstået mig korrekt !
Jeg har en tabel indeholdende data om diverse opgaver. Til en opgave kan der være knyttet en ansvarlig for design, ansvarlig for programmering, ansvarlig for kundekontakt osv osv. Alle disse navne skal "hentes"/relatere til tabellen PERSONER. Jeg ønsker altså at kunne vedligeholde alle disse navn centralt i tabellen PERSONER.
Men når jeg henter feltet DesignAnsvarlig fra opgaver står der jo f.eks. bare 37 heri (hvis den design ansvarlige har ID nr 37 i PERSONER). Spørgsmålet er hvordan jeg nemmest & mest effektivt får hentet navnet på nr 37 ind i stedet for personID´et.
I må undskylde hvis jeres svar allerede nu besvarer ovenstående smøre - jeg ville bare være sikker på at vi talte om det samme !
somaliomar >>> Kan du uddybe dit svar en anelse. Skal jeg lave nogle relationer mellem den nye tabel og da andre stamdata tabeller ?
DLookUp("[Navn]","personer","[personer]![personID] =" & [sælger]) AS sælger henter navn fra tabellen personer hvor personID = sælger for hver post
DLookUp("[Navn]","personer","[personer]![personID] =" & [opgaveansvarlig]) henter navn fra tabellen personer hvor personID = opgaveansvarlig for hver post
så min løsning dækker det, som du har brug for. Det kan godt være at der skal være [firkantede paranteser] udenom navnene som indeholder danske bogstaver.
Hvis du skal have flere felter med, skal de tilføjes i både SELECT-delen og GROUP BY-delen - nemmest før den første Dlookup i hver del og med kommaer udenom
Jeg ved godt jeg ikke specificerede det i mit spm, men jeg foretrækker en løsning hvor jeg kan specificere mit SQL kald direkte i koden, og ikke skal kalde en forespørgsel i access databasen.
Er der nogle fordele (f.eks. performance eller andet) ved at benytte din metode frem for at udføre SQL kaldet direkte i asp koden ?
somaliomar >>>
Dækker din løsning det behov jeg har? og kunne jeg lokke dig til at uddybe punkterne en anelse?
SELECT OPGAVER.firma, OPGAVER.adresse, PERSONER_1.navn AS opgave, PERSONER_2.navn AS design, PERSONER_3.navn AS kontakt
FROM PERSONER AS PERSONER_3 INNER JOIN (PERSONER AS PERSONER_2 INNER JOIN (PERSONER AS PERSONER_1 INNER JOIN OPGAVER ON PERSONER_1.id = OPGAVER.opgaveansvarlig) ON PERSONER_2.id = OPGAVER.designansvarlig) ON PERSONER_3.id = OPGAVER.kontaktansvarlig;
Fordelen ved at lave det i Access, er at du har nogle flere muligheder i Access end i ASP. Man kunne også spørge: Hvad er fordelen ved at lave forespørgslen i ASP??
Nu har jeg fået skruet følgende sammen som VIRKER:
SELECT *,PERSONER_1.personNavn AS saelgerNavn,PERSONER_2.personNavn AS ansvarligNavn FROM PERSONER AS PERSONER_2 INNER JOIN (PERSONER AS PERSONER_1 INNER JOIN OPGAVER ON PERSONER_1.personID = OPGAVER.saelger) ON PERSONER_2.personID = OPGAVER.ansvarlig
Det eneste der irriterer mig nu, er at jeg ikke rigtig kan gennemskue syntaksen i INNER JOIN - jeg forstår simpelthen ikke ovenståede SQL sætning - dvs. jeg forstår ikke JOIN delen !!!
Kunne du evt. overtales til at give mig en pædagogisk forklaring på hvordan INNER JOIN fungerer og hvorledes disse sammensættes. Det forvirrer mig f.eks. en del at de 2 INNER JOINS ikke kommer efter hinanden, men er flettet ind i hinanden...!!!
Jeg takker mange gange for din points og points !!!
:)
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.