Avatar billede knagen7100 Novice
14. januar 2009 - 12:18 Der 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.
Avatar billede knagen7100 Novice
14. januar 2009 - 12:19 #1
Jeg kom til at oprette spørgsmålet inden jeg har tildet point. Jeg giver 100 point mere i nyt spørgsmål hvis der er nogen der har løsningen.
Avatar billede Syska Mester
14. januar 2009 - 17:00 #2
hmmm, tænke tænke ...

Sikkert bare mig der er træt eller ...

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 )

// ouT
Avatar billede janus_007 Nybegynder
14. januar 2009 - 19:43 #3
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.
Avatar billede knagen7100 Novice
15. januar 2009 - 10:34 #4
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.
Avatar billede Syska Mester
15. januar 2009 - 14:26 #5
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 :-)

// ouT
Avatar billede janus_007 Nybegynder
15. januar 2009 - 23:13 #6
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?
Avatar billede knagen7100 Novice
19. februar 2009 - 13:49 #7
Lukker
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
Computerworld tilbyder specialiserede kurser i database-management

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