12. juni 2010 - 11:39Der 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
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.
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.
Synes godt om
Ny brugerNybegynder
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.