Avatar billede rkb Nybegynder
22. oktober 1999 - 11:36 Der er 10 kommentarer og
1 løsning

Join tabeller, relattioner og Select AS?

Jeg har tre tabeller, en kunde, en ansat, en person

En person skal både kunne være en kunde og en ansat, så min tabel ser sådan her ud:

    Personnr
    Ansatnr
    Kundenr

og er så relateret til de respektive tabeller, hvis det er en kunde man vil oprette vil ansatnr være 0,
i ansat er ansat 0 sat til nogle N/A værdier, kan det laves smartere?

Det samme gælder hvis det er en ansat og ikke en kunde.

Derudover så skal jeg have lavet en forespørgelse, hvor jeg godt vil kunne joine de to tabeller.
Og gøre sådan at fx kunde.fornavn og ansat.fornavn bliver vist som et fornavn, altså AS fornavn,
på begge to... Hvordan kan det laves? og det er spørgsmållet...
Avatar billede ij Nybegynder
22. oktober 1999 - 12:15 #1
Jeg fatter overhovedet ikke hvad det er du vil?
Avatar billede midgaardsorm Nybegynder
22. oktober 1999 - 13:11 #2
Prøv lige en gang til ??????
Avatar billede rkb Nybegynder
22. oktober 1999 - 13:21 #3
Jeg har TO tabeller ANSAT og KUNDE....

Begge to indholder Fornavne og Efternavne, samt andre attributter der er unike for henholdsvis en kunde og ansat.

Derudover har jeg en tabel der hedder PERSON, person tabellen indeholder et Personnr, Ansatnr, Kundenr - Dvs. at den viser hvilken kunde det drejer sig om , eller hvilken ansat det drejer sig om, når man bruger personnr i de andre relationer, (Grunden er at en ansat godt kan være en kunde, og dermed vil det være redundant at have oprette ham som kunde også)

Hvis en det er en Kunde der skal relateres til, så er ansatnr på Person = 0, omvendt hvis det er en ansat så er kundenr = 0

Altså Tre tabeller

Kunde: Kundenr, Fornavn, Efternavn, osv....
Ansat: Ansatnr, Fornavn, Efternavn, Stilling....
Person: Personnr, Ansatnr, Kundenr

Avatar billede rkb Nybegynder
22. oktober 1999 - 13:25 #4
Det jeg så godt vil have, er AT man kan lave en SQL forespørgelse der kan tage FORNAVN - EFTERNAVN samt Personnr fra de tre tabeller, sådan at resultatet af forespørgelsen bliver:

Tabel: Personnr, Fornavn, Efternavn - og ikke Personnr, Kunde.fornavn, kunde.efternavn, ansat.fornavn, ansat.efternavn - hvor enten fornavn & efternavn på enten ansat eller kunde er N/A fordi den relatere til deres nr. 0
Avatar billede rkb Nybegynder
22. oktober 1999 - 13:29 #5
SELECT Medvirkende.*, Ansat.*
FROM Medvirkende INNER JOIN (Ansat INNER JOIN Person ON Ansat.Ansatnr = Person.Ansatnr) ON Medvirkende.Medvirkendenr = Person.Medvirkendenr;
Avatar billede rkb Nybegynder
22. oktober 1999 - 13:30 #6
UPS - sådan ser den forespørgelse ud som jeg har nu, der ikke er som jeg vil have den, altså den tager medvirkende.fornavn ... ansat.fornavn ...
instedet for bare at merge dem sammen til fornavn efternavn... (kunde/medvirkende - samme sag)
Avatar billede mit Nybegynder
22. oktober 1999 - 14:37 #7
Forslag: Læg alle de attributter (f.eks navnene) som er fælles/ens op i tabellen Person, således at det kun er de attributter, som er specielle for hhv. kunde og ansat, som ligger i disse tabller...
Avatar billede rkb Nybegynder
22. oktober 1999 - 16:33 #8
Det er selvfølgelig en ide, men det svare ikke rigtigt på mit spørgsmål, men jeg må nok indse at det ikke er til at lave, men spørgsmålet er åben for et godt svar... alligvel, jeg har lavet det på en anden måde med at bruge to forespørgelser og så ikke lave "Order By" på hele resultatet.

Hvis der er nogle der kan komme med en god ting til at sortere alle attributter sådan at  kunde efternavn bliver sortet sammen med efternavn på ansat, så er jeg også modtagelig. Og da det skal bruges i ASP kan det også være en mulighed for dem der vil score pointene, at lave/henvise til et sted hvor der er asp script der kan lave sorteringen på resultatet... for så er det heller ikke noget problem...
Avatar billede brian_d Nybegynder
26. oktober 1999 - 11:33 #9
Jeg håber pointene stadig er tilgængelige for løsningen kommer her.


SELECT IIf([person].[kundenr]<>0,[kunde].[efternavn],[ansat].[efternavn]) AS efternavn, IIf([person].[kundenr]<>0,[kunde].[fornavn],[ansat].[fornavn]) AS fornavn
FROM ansat RIGHT JOIN (kunde RIGHT JOIN person ON kunde.kundenr = person.kundenr) ON ansat.ansatnr = person.ansat;


Jeg håber det kan bruges

Brian_d :o)

Avatar billede rkb Nybegynder
26. oktober 1999 - 20:54 #10
Well nu kommer det jo godtnok lidt sent, da jeg godtnok har lavet det på en anden måde, og ændret min database så det kan lade sig gøre på en anden måde, men det er da en til gemmeren det der... Lige en ting ekstra som jeg godt lige vil have dig til før du får pointene, er at sætte på hvordan man så får resultatet ORDERed BY - for jeg kunne ikke helt få den til bare at Order By Efternavn, - Efternav,Fornavn... hvis du lige gider gøre det, så jeg har det klare billede af hvorden det gøres til en anden gang, så er pointene dine..
Avatar billede brian_d Nybegynder
27. oktober 1999 - 10:34 #11

løsningen af sorteringen er den samme iif sætning som i udvælgelsen.

SELECT IIf([person].[kundenr]<>0,[kunde].[efternavn],[ansat].[efternavn]) AS efternavn, IIf([person].[kundenr]<>0,[kunde].[fornavn],[ansat].[fornavn]) AS fornavn
FROM ansat RIGHT JOIN (kunde RIGHT JOIN person ON kunde.kundenr = person.kundenr) ON ansat.ansatnr = person.ansat
ORDER BY IIf([person].[kundenr]<>0,[kunde].[efternavn],[ansat].[efternavn]), IIf([person].[kundenr]<>0,[kunde].[fornavn],[ansat].[fornavn]);

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

IT-JOB