22. oktober 1999 - 11:36Der 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...
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
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
SELECT Medvirkende.*, Ansat.* FROM Medvirkende INNER JOIN (Ansat INNER JOIN Person ON Ansat.Ansatnr = Person.Ansatnr) ON Medvirkende.Medvirkendenr = Person.Medvirkendenr;
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)
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...
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...
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;
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..
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]);
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.