Avatar billede sitemaster Nybegynder
24. marts 2005 - 01:43 Der er 12 kommentarer og
1 løsning

inner join i ASP med 8 tabeller

jeg skal lige have lidt førstehjælp til inner, left og right join

altså jeg har en stribe tabeller
Tabel1 indeholder medlems info
Tabel2 indeholder medlemsstatus
Tabel3 indeholder medlemslocation
Tabel4 indeholder holdmedlemmer
Tabel5 indeholder hold
Tabel6 indeholder det indtastede i de ekstra medlemsfelter
Tabel7 indeholder ekstra medlemsfelter
Tabel8 indeholder ekstra medlemsfelter kategorier

hvis jeg bare kører inner join hele vejen igennem poster den den samme person lige så mange gange der er "ekstra medlemsfelter kategorier" * "det indtastede i de ekstra medlemsfelter"

altså hvis der er 2 ekstra medlemsfeltkategorier og medlemmet har indtastet info i 9 ekstra medlemsfelter så poster den personen 2*9 = 18 gange efter hinanden, jeg er lidt ny indenfor inner join og har dælme svært ved helt at fatte dem, en forklaring skåret ud i pap og bøjet i neon vil være et hit :D

kan det ikke lade sig at gøre i en sql streng eller skal jeg lave flere, min plan er at den skal poste et medlem 1 gang med de forskellige data der er i tabellerne også hvis der i den pågældende tabel er flere posts på det samme medlem.
Avatar billede sitemaster Nybegynder
24. marts 2005 - 10:45 #1
er det ikke muligt hvis man har en join fra tabel1 til tabel2 (hvor tabel2 rummer flere records) at få dem skrevet ud 1 gang i stedet for de gange recorden eksisterer i tabel2 ?

altså hvis man har en Do While Not rs.EOF
hvorfor henter den så de samme data feks. 2 gange hvis tabel2 indeholder medlemmet fra tabel1 2 gange
Avatar billede sjap Praktikant
24. marts 2005 - 10:59 #2
Hvilket felt laver du joinen på?
Er Tabel1 "hovedtabellen", som du laver alle joins ud fra?
Avatar billede sitemaster Nybegynder
24. marts 2005 - 11:16 #3
sådan ser min join ud, har afkortet den til 2 joins

    strSql =    "SELECT " & _
            "A.memberid, A.name, A.realname, A.birthday, A.location, A.email, A.homepage, A.customstatus, A.status, A.hidemember, " & _
            "B.statusid, B.statusname, B.displayorder, " & _
            "C.memberlocationid, C.memberid, C.locationid, C.memberlocationid " & _
            "FROM ( MEMBER AS A " & _
            "INNER JOIN MEMBERSTATUS AS B " & _
            "ON B.statusid = A.status) " & _
            "INNER JOIN MEMBERLOCATION AS C " & _
            "ON C.memberid = A.memberid " & _
            "WHERE A.hidemember = 0 " & _
            "ORDER BY B.displayorder, B.statusname ASC"
Avatar billede sitemaster Nybegynder
24. marts 2005 - 11:19 #4
glemte lige

medlemmet kan have flere lokationer som er i gemt MEMBERLCATION
Avatar billede sjap Praktikant
24. marts 2005 - 11:40 #5
Her er der lidt SQL, som du lige selv kan stoppe ind i en streng og prøve med:

SELECT A.memberid, A.name, A.realname, A.birthday, A.location, A.email, A.homepage, A.customstatus, A.status, A.hidemember, B.displayorder, B.statusname, C.memberlocationid, C.locationid
FROM (A INNER JOIN C ON A.memberid = C.memberid) INNER JOIN B ON A.status = B.statusid
WHERE (((A.hidemember)=0))
ORDER BY B.displayorder, B.statusname;
Avatar billede sjap Praktikant
24. marts 2005 - 11:48 #6
Der er lige en ting jeg er lidt i tvivl om vedr. dit spørgsmål. Jeg vil prøve at stille det lidt enkelt op, og håber så det er til at forstå:

Du har f.eks.
- en tabel med Navn
- en tabel med Telefonnumre

Hvert "Navn" kan godt have flere telefonnumre, men hvert "Telefonnummer" kan kun have et navn.

Hvis du så laver en forespørgsel, der vise navne og telefonnumre, så vil resultatet kunne se således ud:

Navn1 Telefonnummer1
Navn1 Telefonnummer2
Navn1 Telefonnummer3
Navn2 Telefonnummer4
Navn3 Telefonnummer5

Dvs. Navn1 bliver gentaget tre gange, fordi det er det navn, der hører til de pågældende telefonnumre. Sådan er det, for det er det man beder om, med denne forespørgsel.

Som jeg læser dit spørgsmål, så er det, som du vil undgå. Er det korrekt?
Avatar billede sitemaster Nybegynder
24. marts 2005 - 11:50 #7
hhmm giver det samme resultat, den poster stadig det sammme 2 gange fordi det eksistere 2 gange i MEMBERLOCATION
Avatar billede sitemaster Nybegynder
24. marts 2005 - 11:53 #8
ja sjap jeg vil have den til at poste det en gang, således

Navn1, Telefonnummer2, Telefonnummer2, osv

i stedet for

Navn1 Telefonnummer1
Navn1 Telefonnummer2
Navn1 Telefonnummer3
Avatar billede sitemaster Nybegynder
24. marts 2005 - 11:54 #9
argh hvorfor kan man ikke edit en besked :D

skal selvfølgelig være Navn1, Telefonnummer1, Telefonnummer2, osv
Avatar billede sitemaster Nybegynder
24. marts 2005 - 13:06 #10
er det muligt at tælle hvor mange posts der er i MEMBERLOCATION tebellen i den INNER JOIN
Avatar billede sjap Praktikant
24. marts 2005 - 15:56 #11
Selve den forespørgsel som du leder efter, kan jeg ikke lige finde ud af (er lidt dum i hovedet i dag), og det er faktisk en af de svære, fordi det er på tværs af poster. Men den sidste forespørgsel kan jeg klare:

SELECT A.memberid, Count(C.memberlocationid) AS Antalmemberlocation
FROM A INNER JOIN C ON A.memberid = C.memberid
GROUP BY A.memberid;
Avatar billede sitemaster Nybegynder
24. marts 2005 - 16:33 #12
hhmm tror bare jeg dropper det og går tilbage til et hav af dbconnections

men nu tak for hjælpen, hvordan kaster jeg poientene over til dig ?
Avatar billede sjap Praktikant
24. marts 2005 - 18:31 #13
Jeg kunne jo f.eks. lægge et svar :0)
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