Avatar billede klk Nybegynder
12. juni 2010 - 11:39 Der er 1 kommentar og
1 løsning

Outer join imod flere enslignende datasæt driller

Jeg har alvorlige hastighedsproblemer i min database, fordi der er store mængder data, og alt skal gøres korrekt med hensyn til relationer og joins. Det er fortrolige data, så jeg kommer med tænkte eksempler.

Jeg har en seriel værdi af en dato som nøgle i alle tabeller.

Jeg spiller i lotteriet. Jeg er med i flere forskellige på forskellige datoer.

Jeg er med i:
Lot1
Lot2
Lot3

Jeg har flere kuponner med 1 lykke nummer
Kup1
Kup2
......

Mål: Alt skal komme ud i en resulterende forespørgsel bygget op af flere forespørgsler oven på hinanden.

DATO LOTT Numm LOTT Numm LOTT Numm
0105 NULL NULL NULL NULL NULL NULL
0205 LOT1 9081 LOT2 3434 LOT3 6876
0205 NULL NULL LOT2 2464 NULL NULL
0205 NULL NULL LOT2 9212 NULL NULL

Det går fint med at "look'e op i" (relation med pil til højre)den styrende serielle dato for LOT1. Men når jeg bagefter i en ny forespørgsel lave denne "outer join" med data i LOT2 datasættet går det galt.

Access tror den skal tage alle forekomster i LOT2 og stille dem over for hver enkelt post i DATO/LOT1/Numm. Det giver 45000*50000 records og min maskine dør en langsom død.

Det sker, selvom jeg bruger pil til højre i relationen.

Er problemet, at jeg ikke på forhånd ved hvilket datasæt der er flest records i. Altså at den ikke kan danne nye records i udtrækket for linie 3 og 4 i eksemplet
Avatar billede klk Nybegynder
13. juni 2010 - 18:13 #1
2 strategier er blevet afprøvet:
A)
En forespørgsel med den styrende dato op imod 1. datasæt.
En forespørgsel med den styrende dato op imod 2. datasæt.
En forespørgsel med den styrende dato op imod 3. datasæt.
En forespørgsel samlende de 3 foregående, men stadig med pil til højre (hvilket måske er fejlen).

B)
En forespørgsel med den styrende dato op imod 1. datasæt.
Denne op imod 2. datasæt i en ny forespørgsel.
Denne nye forespørgsel op imod 2. datasæt.
Denne sidst generede forespøgsel op imod 3. datasæt.
Avatar billede klk Nybegynder
15. juni 2010 - 10:21 #2
Tak fordi jeg måtte bruge jeres medie til at skrive mig ud af problemet.

Det er ikke helt rigtigt beskrevet for
LOT1
LOT2
LOT3
kører i en kolonne ud for datoen. LOT1 linier kan så forekomme så mange gange som der er Kuponner i LOT1 osv.

Det løser man ved at tage alle LOTx som kan forekomme i de datasæt der måtte være til rådighed. Smid dem ned i en tabel og træk LOTx ud distinct.

Så laver man en forespørgsel med en tabel med 365 datoer i og denne "distinct forespørgsel" uden relation imellem. hvis der er 20 uniqe LOTx så viser den 20 Lotx'ere for hver dato i et år:
20*365 records.

Den holder man op imod et tabel med Dato, LOT1 og Kupx og imod en tabel med dato, LOT2, Kupx osv.

Dato og lotterinummer relateres op imod dato og LOTx i de andre tabeller med pil til højre. Så vil nogle linier have blot en dato og ellers være tomme og andre vil have linier med tomme felter for det lotterinummer man ikke deltog i denne dag.
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