Avatar billede draeber Nybegynder
27. april 2006 - 17:22 Der er 4 kommentarer og
1 løsning

Stor SELECT med WHERE til JOIN

Hej

Jeg har flg. select-stmt:
SELECT  idtbl.id,
        pnr,
        tnr,
        po,
        navn,
        landekode,
        saelger,
        salgsenhed,
        personkode,
        fakturadato,
        silo.antal,
        silotyper.type,
        silotyper.model,
        silo.bestilt,
        silo.ordrebek,
        afskibning,
        silo.aflevering_salg,
        container_dato,
        omroerer.type,
        blaeser.antal,
        blaeser.model,
        blaeser.ny,sugende,
        toemmeudstyr.stoerrelse,
        traekstation.diameter,
        haeldning,
        motorantal,
        motorstr,
        oliefyrtyper.model,
        mobilsnegltyper.model,
        transportanlaeg.maerke,
        elstyring.leverandoer ,
        fundament.ansvarlig,
        bygmoede,
        udl_liste,
        silostroem,
        projstart,
        hold,
        fund_godkendt ,
        afleveret,
        silo_godkendt,
        aflev_forret,
        maintbl.bemaerk,
        slutafregning,
        personkodeslut,
        oprettelsesdato,
        lille_byggemaal,
        ordrebek_kunde,
        rate1betalt,
        mangler_stumper,
        kunde_komplet,
        blaeser.bestilt,
        oliefyr.leveret,
        mobilsnegl.leveret,
        mobilsnegl.samlet,
        mobilsnegl.bestilt,
        transportanlaeg.leveret,
        transportanlaeg.bestilt,
        elstyring.leveret,
        elstyring.best_dato,
        fundament.faerdig,
        maintbl.bygmoede_afholdt,
        maintbl.paabegyndt,
        fundament.klar_mont,
        okonomi.betalt
    FROM  idtbl, maintbl,
          kundedata, okonomi,
          silo, silotyper,
          omroerer, blaeser,
          toemmeudstyr,traekstation,
          oliefyr, oliefyrtyper,
          mobilsnegl, mobilsnegltyper,
          elstyring, fundament,
          transportanlaeg
    WHERE maintbl.id = kundedata.id
      AND idtbl.id = maintbl.id
      AND idtbl.id = okonomi.id
      AND idtbl.id = silo.id
      AND silo.mid = silotyper.mid
      AND idtbl.id = omroerer.id
      AND idtbl.id = blaeser.id
      AND idtbl.id = toemmeudstyr.id
      AND idtbl.id = traekstation.id
      AND oliefyr.id = idtbl.id 
      AND oliefyr.mid = oliefyrtyper.mid
      AND mobilsnegl.id = idtbl.id
      AND mobilsnegl.mid = mobilsnegltyper.mid
      AND idtbl.id = elstyring.id
      AND idtbl.id = fundament.id
      AND idtbl.id = transportanlaeg.id
ORDER BY idtbl.id

Er der én, som kan give mig det med så mange JOIN, som muligt, så det virker... Nu har jeg kæmpet med det noget tid, og render hele tiden i en eller anden fejl, afhængig af, hvordan jeg får sat det sammen.
Det haster lidt...
Avatar billede draeber Nybegynder
27. april 2006 - 17:43 #1
for at vide, hvor hvad kommer fra, så er her en lille opdatering til SELECT:
SELECT  idtbl.id,
        idtbl.pnr,
        idtbl.tnr,
        idtbl.po,
        kundedata.navn,
        kundedata.landekode,
        kundedata.saelger,
        kundedata.salgsenhed,
        okonomi.personkode,
        okonomi.fakturadato,
        silo.antal,
        silotyper.type,
        silotyper.model,
        silo.bestilt,
        silo.ordrebek,
        silo.afskibning,
        silo.aflevering_salg,
        silo.container_dato,
        omroerer.type,
        blaeser.antal,
        blaeser.model,
        blaeser.ny,sugende,
        toemmeudstyr.stoerrelse,
        traekstation.diameter,
        traekstation.haeldning,
        traekstation.motorantal,
        traekstation.motorstr,
        oliefyrtyper.model,
        mobilsnegltyper.model,
        transportanlaeg.maerke,
        elstyring.leverandoer ,
        fundament.ansvarlig,
        maintbl.bygmoede,
        maintbl.udl_liste,
        maintbl.silostroem,
        maintbl.projstart,
        maintbl.hold,
        fundament.fund_godkendt ,
        maintbl.afleveret,
        maintbl.silo_godkendt,
        maintbl.aflev_forret,
        maintbl.bemaerk,
        okonomi.slutafregning,
        okonomi.personkodeslut,
        idtbl.oprettelsesdato,
        traekstation.lille_byggemaal,
        okonomi.ordrebek_kunde,
        okonomi.rate1betalt,
        maintbl.mangler_stumper,
        maintbl.kunde_komplet,
        blaeser.bestilt,
        oliefyr.leveret,
        mobilsnegl.leveret,
        mobilsnegl.samlet,
        mobilsnegl.bestilt,
        transportanlaeg.leveret,
        transportanlaeg.bestilt,
        elstyring.leveret,
        elstyring.best_dato,
        fundament.faerdig,
        maintbl.bygmoede_afholdt,
        maintbl.paabegyndt,
        fundament.klar_mont,
        okonomi.betalt
FROM...
Avatar billede eagleeye Praktikant
27. april 2006 - 22:00 #2
Du kan prøve sådan her, jeg er lidt i tvivl om hvilken er "hoved" tabellen:


    FROM  idtbl
    LEFT JOIN (maintbl,
          kundedata, okonomi,
          silo, silotyper,
          omroerer, blaeser,
          toemmeudstyr,traekstation,
          oliefyr, oliefyrtyper,
          mobilsnegl, mobilsnegltyper,
          elstyring, fundament,
          transportanlaeg)
    ON (maintbl.id = kundedata.id
      AND idtbl.id = maintbl.id
      AND idtbl.id = okonomi.id
      AND idtbl.id = silo.id
      AND silo.mid = silotyper.mid
      AND idtbl.id = omroerer.id
      AND idtbl.id = blaeser.id
      AND idtbl.id = toemmeudstyr.id
      AND idtbl.id = traekstation.id
      AND oliefyr.id = idtbl.id 
      AND oliefyr.mid = oliefyrtyper.mid
      AND mobilsnegl.id = idtbl.id
      AND mobilsnegl.mid = mobilsnegltyper.mid
      AND idtbl.id = elstyring.id
      AND idtbl.id = fundament.id
      AND idtbl.id = transportanlaeg.id)





Eller sådan her med en JOIN pr linie:


  FROM  (((((((((((((((idtbl LEFT JOIN maintbl ON idtbl.id = maintbl.id)
  LEFT JOIN kundedata ON maintbl.id = kundedata.id)
  LEFT JOIN okonomi ON idtbl.id = okonomi.id)
  LEFT JOIN silo ON idtbl.id = silo.id)
  LEFT JOIN silotyper ON silo.mid = silotyper.mid)
  LEFT JOIN omroerer ON idtbl.id = omroerer.id)
  LEFT JOIN blaeser ON idtbl.id = blaeser.id)
  LEFT JOIN toemmeudstyr ON idtbl.id = toemmeudstyr.id)
  LEFT JOIN traekstation ON idtbl.id = traekstation.id)
  LEFT JOIN oliefyr ON idtbl.id = oliefyr.id)
  LEFT JOIN oliefyrtyper ON oliefyr.mid = oliefyrtyper.mid)
  LEFT JOIN mobilsnegl ON idtbl.id = mobilsnegl.id)
  LEFT JOIN mobilsnegltyper ON mobilsnegl.mid = mobilsnegltyper.mid)
  LEFT JOIN elstyring ON idtbl.id = elstyring.id)
  LEFT JOIN fundament ON idtbl.id = fundament.id)
  LEFT JOIN transportanlaeg ON idtbl.id = transportanlaeg.id




Nu har jeg skrevet LEFT JOIN, det kan være du ønsker at benytte INNER JOIN.
Avatar billede eagleeye Praktikant
27. april 2006 - 22:02 #3
En ide kunne være at starte med at lave JOIN af 2 eller 3 tabller og så tilføje et par stykker af gangen indtil du har alle tabellerne med da der er mange som der skal holdes styr på :)
Avatar billede draeber Nybegynder
27. april 2006 - 22:04 #4
det har jeg også prøvet i mellemtiden.... jeg endte med en fejl....
Jeg er nu ved at lægge databasen helt om, så mySQL ikke skal lave så mange JOINS.
Så regner jeg med at problemet er løst.

Jeg lukker derfor også spørgsmålet nu
Avatar billede draeber Nybegynder
27. april 2006 - 22:06 #5
hov.... jeg så slet ikke, at du havde svaret også!
Det må du undskylde!!!
Jeg har slet ikke prøvet det af, og jeg er også rimelig sikker på, at jeg ikke gør det nu....

Hvis du vil have lidt point for dit svar alligevel, vil jeg meget gerne oprette et nyt spørgsmål!
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