14. januar 2009 - 12:18Der er
6 kommentarer og 1 løsning
SQL forespørgsel
Jeg har det scrip som giver mig indholdet af kolonnerne: grnr, adnr, adr2, adr3, adr4, plnr, ortb, ktnr, kpnr, fonr
Select UAD.grnr, UAD.adnr, UAD.adr2, UAD.adr3, UAD.adr4, UAD.plnr, UAD.ortb, WKV.ktnr, WKV.kpnr UAD.fonr from UAD, WKV, KLI, KRE Where UAD.adnr = WKV.penr And UAD.grnr = WKV.pegr And UAD.adr2 = UAD.adr2 And UAD.adr3 = UAD.adr3 And UAD.adr4 = UAD.adr4 And UAD.plnr = UAD.plnr And UAD.ortb = UAD.ortb And WKV.ktnr = KLI.ktnr And WKV.kpnr = KRE.kpnr Group by UAD.grnr, UAD.adnr, UAD.adr2, UAD.adr3, UAD.adr4, UAD.plnr, UAD.ortb, WKV.ktnr, WKV.kpnr UAD.fonr having max(WKV.ktja)> '2006-09-01 00:00:00.000' order by plnr, adr4
Kolonnen fonr kan indeholde et tal eller NULL. I nogle rækker er indholdet af fonr ens. Jeg vil gerne have et script til at give mig indholdet som ovenstående men hvis indholdet i fonr i nogle rækker er ens skal jeg kun bruge en af rækkerne. Hvis fx 5 rækker har ens værdi i fonr skal jeg kun bruge en af rækkerne. Jeg skal dog stadig bruge alle de rækker hvor fonr er NULL.
1) Men du laver da sygeligt mange inner joins ? 2) Har du et diagram over hvordan de forskellige tabeler logisk set hænger sammen, og de må da kunne joines på en bedre måde, den query må da være MEGA langsom ? 3) Uden at kende den table og de forkertelser ser det mærkeligt ud ... ( for mig :-P )
buzz-> naaa det synes jeg nu ikke, når vi kommer ud i joins der inkluderer 14-18 tabeller så taler vi mange ;) han bruger jo kun 4 i den der :) Vedr. performance så vil et join altid performe fint såfremt relationerne er bygget korrekt med foreign keys og indexes. Sql-serveren vil kunne optimere queryplanen endnu finere med korrekte relationer/ constraints :) og specielt hvis nøglerne er
Og ja.. det ser dælme mærkeligt ud med de navne hehe
Anyway, jeg vil tro uden lige at sætte mig ind i sagen at du blot skal lave en distinct på output og så lave en union hvor du selecter dem med null.
Jeg har ikke selv lavet scriptet, men det virker men er måske lidt langsomt. Nej, jeg har ikke lige noget på hvordan de forskellige tabeller hænger sammen. Det er muligt det ser lidt mærkeligt ud med forkortelser osv men det er jo sådanset sagen uvedkommende.
Janus_007: Jeg tænker specielt her ... mange join conditions: And UAD.grnr = WKV.pegr And UAD.adr2 = UAD.adr2 And UAD.adr3 = UAD.adr3 And UAD.adr4 = UAD.adr4 And UAD.plnr = UAD.plnr And UAD.ortb = UAD.ortb And WKV.ktnr = KLI.ktnr And WKV.kpnr = KRE.kpnr
At jeg så selv til tid og evigned ikke vil lave inner joins på den måde er en helt anden ting ... måske fordi jeg er blevet lært op fra barns ben med den "normale" join måde hvis man kan kalde den det :-)
Sandt nok, det burde ikke være nødvendigt med så mange foreign keys, specielt den der adresse der.. ja det kan tyde på dårligt design. Og ja.. netop den måde er gammeldags (men virker stadig), jeg bruger den dog heller aldrig - har det lidt ligesom dig mht. ANSI-joins.
knagen-> har du lavet en distinct og en union som jeg foreslog?
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.