Avatar billede ulrikp Nybegynder
05. december 2002 - 19:21 Der er 2 kommentarer

Join 3 tabeller

Jeg har 3 tabeller:

E(ID, C, Hits)
VF(ID, EID, Hits)
VP(ID, EID, Hits)

E kan have relateret 0 til N forekomster af både VF og VP.

Jeg vil gerne have udtrukket følgende liste

E.Hits  SUM(VF.Hits)  SUM(VP.Hits)

Problemet ved nedenstående SQL-sætning er, at SUM(VP.Hits) eksempelvis bliver 2, selvom der kun er én forekomst af VP hvor hits=1, og 2 forekomster af VF, som er relateret til E. Altså, hvis:

E(1,Danmark,2)
VF(1,1,1)
VF(2,1,1)
VP(1,1,1)

E.Hits = 2 -> OK
SUM(VF.Hits) = 2 -> OK
SUM(VP.Hits) = 2 -> Ej OK, burde være 1!!

SELECT E.C, E.Hits, SUM(VF.Hits), SUM(VP.Hits) FROM (E Left Join VF on E.ID = VF.EID) left join VP on e.id=vp.eid GROUP BY E.C, E.Hits
Avatar billede ulrikp Nybegynder
05. december 2002 - 19:36 #1
Den første left join går fint, d.v.s. SQL-sætningen:
SELECT E.C, E.Hits, SUM(VF.Hits) FROM E Left Join VF on E.ID = VF.EID GROUP BY E.C, E.Hits
...gør hvad den skal. Derfor skulle man tro, at man kunne gøre følgende, men det kan man ikke:
select E.C, E.Hits, SUM(VF.Hits), SUM(VP.Hits) from ( SELECT E.C, E.Hits, SUM(VF.Hits) FROM E Left Join VF on E.ID = VF.EID GROUP BY E.C, E.Hits ) left join vf on e.id = vp.eid group by e.c, e.Hits
...men det kan bare ikke.
Avatar billede proaccess Nybegynder
06. december 2002 - 08:47 #2
Du skal bruge sub-forespørgsler:

SELECT E.C, E.Hits, (SELECT Sum(Hits) FROM VF WHERE EID=E.ID) AS VF, (SELECT Sum(Hits) FROM VP WHERE EID=E.ID) AS VP FROM E ORDER BY E.C;
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