Jag har problem med att skapa en sql-fråga med JOIN på 4 tabeller.
EFtersom jag är ganska ny på det här så reserverar jag mig kraftigt för
eventuella fel.
Det jag håller på att göra är ett dynamiskt organisationsschema i ASP och
Access-databas. En tabell med personer och en med avdelningar samt 2
tabeller för att avgöra vem som är förälder till vem.
Följande tabeller har jag:
tblPerson
persID - fornamn - efternamn
tblPersonParents
persID - parentID - typ
(typ hade jag tänkt mig bestämma om jag ska leta efter föräldern i
tblPerson eller tblAvdelning)
tblAvdelning
avdID - avdNamn
tblAvdParents
avdID - parentID - typ
Frågan är om jag kan skapa en sql-fråga som hämtar alla personer och
avdelningar, på samma gång, som har samma parentID (förälder) och typ?
//Johanna
Är det rätt att skriva frågan så här? Eller finns det något bättre sätt?
Jag gör väl en koppling mellan tabellerna när jag skriver så här?
valtID är förälderns ID alltså det som ska jämföras med parentID.
SQLfraga = "SELECT *
FROM tblPerson, tblPersonParents, tblAvdelning, tblAvdParents
WHERE tblPerson.persID=tblPersonParents.persID AND tblPersonParents.parentID= "& valtID &" AND tblAvdelning.avdID=tblAvdParents.avdID AND tblAvdParents.parentID= "& valtID &"
ORDER BY tblAvdelning.avdNamn, tblPerson.efternamn, tblPerson.fornamn"
typID är en variabel som bestämmer av vilken typ föräldern är (avdelning eller person). Det ska jämföras med kolumnen typ i tblPersonParents och tblAvdParents.
SQLfraga = "SELECT *
FROM tblPerson, tblPersonParents, tblAvdelning, tblAvdParents
WHERE tblPerson.persID=tblPersonParents.persID
AND tblPersonParents.parentID= "& valtID &"
AND tblAvdelning.avdID=tblAvdParents.avdID
AND tblAvdParents.parentID= "& valtID &" AND tblPersonParents.typ= "& typID &"
AND tblAvdParents.typ= "& typID &"
ORDER BY tblAvdelning.avdNamn, tblPerson.efternamn, tblPerson.fornamn"
Lyckas jag egentligen förklara så någon förstår
//Johanna
Lite fler frågor bara...
I FROM-satsen har du valt tblPerson spelar det någon roll vilken tabell jag sätter där? Kan jag lika gärna ha tblAvdelning och med då lite ändringar i INNER JOIN och WHERE-satsen? Eller är det viktigt vilken ordning de kommer? Varför i så fall?
Så som du skrivit frågan är det ett bättre sätt än med massa AND i WHERE-satsen som jag gjort? Kan inte sql så bra så jag vet inte riktigt skillnaden. Vad är skillnaderna egentligen? Är det bara lättare att förstå eller får jag andra svar eller går det snabbare osv?
//Johanna
Ska försöka förklara bättre. Vet knappt själv hur jag vill ha det ;-)
De här parenttabellerna ska hålla reda på vem som är förälder åt dem. Jag ska rita ett organisationsschema och måste veta vem som ligger över osv.
Eftersom en person både kan ha en avdelning eller en annan person över sig måste jag veta vilken typ föräldern är.
Detta för att jag har en tabell med avdelningar och en personer. Jag måste ju veta i vilken av tabellerna jag ska leta efter föräldern i. För som det är nu så kan ett visst valtID vara både ett persID eller ett avdID.
Jag är lite inne på att ha allting i samma tabell eftersom jag har nästan samma kolumner (skulle kunna justeras till lite). Då slipper jag hålla reda på vilken typ föräldern är av. För då skulle id vara helt unikt, alltså ett persID och ett avdID skulle inte kunna vara samma.
Vet inte vilket som är smartast och lättast?
//Johanna
Det är så att jag behöver inte få några "träffar" i tblPerson men kanske får det i tblAvdelning. Eller tvärtom.
Fungerar din fråga i bägge fallen?
//frågvisa Johanna
Nej. En INNER JOIN returnerar bara poster för vilka villkoret uppfylls av båda tabellerna. Däremot går det bra att använda LEFT eller RIGHT OUTER JOIN.
... De här parenttabellerna ska hålla reda på vem som är förälder åt dem. Jag ska rita ett organisationsschema och måste veta vem som ligger över osv.
Eftersom en person både kan ha en avdelning eller en annan person över sig måste jag veta vilken typ föräldern är....
??? Va? Alltså, vad har vi egentligen? Vi har avdelningar och personer. Menar du något i stil med följande:
En person arbetar på en/flera avdelning(ar). På en avdelning arbetar flera personer. En viss person kan ha en annan som chef, en viss avdelning kan ha en annan avdelning omedelbart över sig. Kan en person ha en avdelning över sig? Eller är min beskrivning fullständigt felaktig? Det vore bra med svar för att fatta hur din struktur ser ut. Vilket är första steget för att kunna svara på om det kan skrivas bättre.