Avatar billede bojohansen Nybegynder
25. juli 2004 - 12:51 Der er 8 kommentarer og
1 løsning

Udtræk fra 2 X Mange til Mange. Kun den ene skal bruges.

Er helt ny i SQL relationer, og måden at bruge relationer på.
Har en DB med Person informationer.

T_PersonInfo :
Id    FNavn    ENavn    NNavn    Koen    osv.    osv.

T_MandensMaal :
Id    LemTykkelse    LemLaengde

T_LemLaengde :
Id    TxtDk    TxtNo    TxtSe    TxtEn

T_LemTykkelse :
Id    TxtDk    TxtNo    TxtSe    TxtEn

T_KvindensMaal :
Id    BhKop    BhOmkreds

T_BHKop :
Id    TxtDk    TxtNo    TxtSe    TxtEn

T_BHOmkreds :
Id    TxtDk    TxtNo    TxtSe    TxtEn

T_MandensMaal indeholder tal fra T_LemLaengde.Id og T_LemTykkelse.Id og Id = T_PersonInfo.Id

T_KvindensMaal indeholder tal fra T_BHKop.Id og BHOmkreds.Id og Id = T_PersonInfo.Id

Men, hvis det er en Mand, så er der selvfølgelig ikke noget info om hans ID i T_KvindensMaal, og er det en kvinde er der selvfølgelig ikke noget Info om hendes ID i T_MandensMaal
På trods af dette vil jeg gerne nøjes med kun at have 1 SQL sætning, og ikke en for en mand og en for en dame.

Hvis jeg inkludere dem alle i en SQL så får jeg en tom forespørgelse.
Hvordan klarer jeg dette problem?
Kan jeg bygge en If Then Else ind i SQL'en som kigger på T_PersonInfo.Koen og derefter tager fra enten T_MandensMaal eller KvindensMaal

Dette funger ikke :

SELECT T_PersonInfo.Id AS T_PersonInfo_Id, T_PersonInfo.NNavn, T_LemTykkelse.TxtDk, T_LemLaengde.TxtDk, T_BhKop.TxtDk, T_BhOmkreds.TxtDk
FROM (T_PersonInfo INNER JOIN (T_LemTykkelse INNER JOIN (T_LemLaengde INNER JOIN T_MandensMaal ON T_LemLaengde.Id = T_MandensMaal.LemLaengde) ON T_LemTykkelse.Id = T_MandensMaal.LemTykkelse) ON T_PersonInfo.Id = T_MandensMaal.Id) INNER JOIN (T_BhOmkreds INNER JOIN (T_BhKop INNER JOIN T_KvindensMaal ON T_BhKop.Id = T_KvindensMaal.BhKop) ON T_BhOmkreds.Id = T_KvindensMaal.BhOmkreds) ON T_PersonInfo.Id = T_KvindensMaal.Id;
Avatar billede bojohansen Nybegynder
25. juli 2004 - 13:54 #1
Sidder og leger lidt med

IIf(Udtryk, SandDel, FalskDel)

Select..FROM (T_PersonInfo INNER JOIN IIf(PersonInfo.Koen=1, SQL for MandensMaal, SQL for KvindensMaal)

Men jeg kan ikke få det til at virke, er det overhovedet muligt at bruge det på denne måde
Avatar billede hekla Nybegynder
25. juli 2004 - 16:15 #2
Det kan laves med en UNION-forespørgsel:
Lav din forespørgsel for mænd og den for kvinder og sæt dem sammen som:

SELECT ... FROM ...
UNION
SELECT ... FROM ...

Det kræver at felterne i de to delforespørgsler er af samme type (tal, text osv.)
Avatar billede bojohansen Nybegynder
25. juli 2004 - 18:40 #3
Ja, jeg kan jo ikke sige andet end at det virker.
Ville dog stadigt gerne have haft muligheden for If Then Else, for med Union lave den nogle unødvendige opslag i DB'en, men jeg kan senere overveje at lave det om i hver sin SQL som så dynamisk vælges ud fra en tidligere Køns variabel fra forrige side (.asp)
Avatar billede bojohansen Nybegynder
25. juli 2004 - 18:41 #4
Tak for det ;-)
Avatar billede hekla Nybegynder
25. juli 2004 - 18:47 #5
Takker for point.
Avatar billede hekla Nybegynder
25. juli 2004 - 18:54 #6
Har du prøvet med
iif([T_personinfo]![Koen] = "Mand", [t_lemlaengde]![TxtDk], "") AS Lemlaengde
osv.
Avatar billede hekla Nybegynder
25. juli 2004 - 18:57 #7
Det kræver nok at du fjerner dine joins i forespørgslen og laver dem mellem tabellerne i Access' relationsvindue i stedet.
Avatar billede hekla Nybegynder
25. juli 2004 - 20:22 #8
Det skal laves med RIGHT JOIN i stedet for INNER JOIN, så tror jeg at det virker
Avatar billede bojohansen Nybegynder
26. juli 2004 - 21:18 #9
Jeg syntes det bliver lidt for kringlet, og kan PT. ikke lige se logikken i det.....det kommer nok lidt senere når jeg er blevet lidt mere fortrolig med kompliceret relations SQL.

Jeg har besluttet mig for at lave en SQL for hver Køn.

Tak for hjælpen :-)
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