Avatar billede tvbrandt Nybegynder
07. juni 2004 - 14:04 Der er 18 kommentarer og
1 løsning

Vis alle og ikke kun nogle få

Jeg har en database med nogle tabeller over entreprenører, sager og udbud.
Jeg vil gerne have data ud om enkelte entreprenører, hvilke sager og udbud de er med i samt hvilke sager de har vundet.

Til det har jeg følgende fra ACCESS:

SELECT entreprenørTabel.e_id, entreprenørTabel.navn, sagsTabel.journalNr, sagsTabel.arbNavn, sagsTabel.adresse, sagsTabel.udbudsdato, udbudsTabel.pris_1, udbudsTabel.vundet_1, udbudsTabel.vundet_2, udbudsTabel.vundet_3, udbudsTabel.vundet_4, udbudsTabel.vundet_5, udbudsTabel.vundet_6
FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id=udbudsTabel.e_id_1) INNER JOIN sagsTabel ON udbudsTabel.u_id=sagsTabel.u_id
WHERE (((entreprenørTabel.e_id)=[udbudsTabel.e_id_1] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_2] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_3] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_4] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_5] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_6]) AND ((udbudsTabel.pris_1)>0));

Men den henter kun dem ud der har vundet. Og den skal jo også hente alle de andre ud.
Avatar billede jensen363 Forsker
07. juni 2004 - 14:12 #1
Der må være noget i din WHERE-sætning ... som sætter dine begrænsninger ;)
Avatar billede ldanielsen Nybegynder
07. juni 2004 - 14:13 #2
Du skal nok bruge et OUTER JOIN, må ske sådan:

SELECT entreprenørTabel.e_id, entreprenørTabel.navn, sagsTabel.journalNr, sagsTabel.arbNavn, sagsTabel.adresse, sagsTabel.udbudsdato, udbudsTabel.pris_1, udbudsTabel.vundet_1, udbudsTabel.vundet_2, udbudsTabel.vundet_3, udbudsTabel.vundet_4, udbudsTabel.vundet_5, udbudsTabel.vundet_6
FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id=udbudsTabel.e_id_1) LEFT OUTER JOIN sagsTabel ON udbudsTabel.u_id=sagsTabel.u_id
WHERE (((entreprenørTabel.e_id)=[udbudsTabel.e_id_1] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_2] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_3] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_4] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_5] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_6]) AND ((udbudsTabel.pris_1)>0));

Det er lige lidt svært at overskue :o)
Avatar billede kabbak Professor
07. juni 2004 - 14:14 #3
du skal vælge alle fra entreprenørTabel og dem der passer fra udbudsTabel
Avatar billede tvbrandt Nybegynder
07. juni 2004 - 14:58 #4
hvordan kan man hente alle records fra entreprenørTabel og samtidig hente dem der passer til fra udbudsTabel
Avatar billede kabbak Professor
07. juni 2004 - 15:03 #5
dobbeltklik op de linier der fobinder tabellerne i forespørgslen, så får du 3 valg muligheder.
Avatar billede jensen363 Forsker
07. juni 2004 - 18:36 #6
Benyt LEFT JOIN til at medtage alt fra den ene tabel
Avatar billede tvbrandt Nybegynder
08. juni 2004 - 08:44 #7
Det er da det samme som kabbak har foreslået. Er det ikke?

kabbak skrev: dobbeltklik op de linier der fobinder tabellerne i forespørgslen, så får du 3 valg muligheder.
Avatar billede tvbrandt Nybegynder
08. juni 2004 - 08:47 #8
Med dette

SELECT entreprenørTabel.e_id, entreprenørTabel.navn, sagsTabel.journalNr, sagsTabel.arbNavn, sagsTabel.adresse, sagsTabel.udbudsdato, udbudsTabel.pris_1, udbudsTabel.vundet_1, udbudsTabel.vundet_2, udbudsTabel.vundet_3, udbudsTabel.vundet_4, udbudsTabel.vundet_5, udbudsTabel.vundet_6
FROM (entreprenørTabel LEFT JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_1) LEFT JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id
WHERE (((entreprenørTabel.e_id)=[udbudsTabel.e_id_1] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_2] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_3] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_4] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_5] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_6]) AND ((udbudsTabel.pris_1)>0));


får jeg stadig kun vist de data hvor der er nogle der har vundet sagen.
Avatar billede jensen363 Forsker
08. juni 2004 - 09:07 #9
Zip lige basen og send den til mig så skal jeg fixe det ...
Avatar billede tvbrandt Nybegynder
08. juni 2004 - 09:11 #10
har du en mail
Avatar billede jensen363 Forsker
08. juni 2004 - 09:13 #11
ose@post.dk
Avatar billede tvbrandt Nybegynder
08. juni 2004 - 09:20 #12
er afsendt. Er nød til at gå om 10-15 minutter og kommer så tilbage senest kl. 12
Avatar billede jensen363 Forsker
08. juni 2004 - 09:46 #13
Denne giver flere records ... begrænsningen ligger udbudsTabel.pris_1 >0 ... ændret til >=0 ..

SELECT entreprenørTabel.e_id, entreprenørTabel.navn, sagsTabel.journalNr, sagsTabel.arbNavn, sagsTabel.adresse, sagsTabel.udbudsdato, udbudsTabel.pris_1, udbudsTabel.vundet_1, udbudsTabel.vundet_2, udbudsTabel.vundet_3, udbudsTabel.vundet_4, udbudsTabel.vundet_5, udbudsTabel.vundet_6
FROM (entreprenørTabel LEFT JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_1) LEFT JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id
WHERE (((entreprenørTabel.e_id)=[udbudsTabel.e_id_1] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_2] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_3] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_4] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_5] Or (entreprenørTabel.e_id)=[udbudsTabel.e_id_6]) AND ((udbudsTabel.pris_1)>=0)) OR (((udbudsTabel.pris_2)>=0)) OR (((udbudsTabel.pris_3)>=0)) OR (((udbudsTabel.pris_4)>=0)) OR (((udbudsTabel.pris_5)>=0)) OR (((udbudsTabel.pris_6)>=0));
Avatar billede tvbrandt Nybegynder
08. juni 2004 - 10:56 #14
Med dette får jeg at vide hvem der har vundet den enkelte sag.
Jeg mangler så "bare" at få alle de andre entreprenørnavne ud og få at vide om de har budt på nogle af sagerne, samt hvilke.
Avatar billede jensen363 Forsker
08. juni 2004 - 11:27 #15
SELECT entreprenørTabel.e_id, entreprenørTabel.navn, sagsTabel.journalNr, sagsTabel.arbNavn, sagsTabel.adresse, sagsTabel.udbudsdato, udbudsTabel.pris_1, udbudsTabel.vundet_1, udbudsTabel.vundet_2, udbudsTabel.vundet_3, udbudsTabel.vundet_4, udbudsTabel.vundet_5, udbudsTabel.vundet_6
FROM (entreprenørTabel LEFT JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_1) LEFT JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id;
Avatar billede jensen363 Forsker
08. juni 2004 - 11:28 #16
Problemet lå i de begrænsninger du har i WHERE sætningen ...
Avatar billede tvbrandt Nybegynder
08. juni 2004 - 11:37 #17
Vi er nu et skridt nærmere. Den udskriver nu
- alle entreprenørnavne
- hvem der har vundet de enkelte sager

Men den mangler at skrive hvem der har budt på sagerne. Der kan være op til 6 der har budt, men kun én vinder sagen. Det var derfor jeg havde den der WHERE-sætning
Avatar billede tvbrandt Nybegynder
08. juni 2004 - 16:38 #18
Nu har jeg dette

SELECT entreprenørTabel.navn, entreprenørTabel.adresse, udbudsTabel.vundet_1, udbudsTabel.vundet_2, udbudsTabel.vundet_3, udbudsTabel.vundet_4, udbudsTabel.vundet_5, udbudsTabel.vundet_6, sagsTabel.journalNr, sagsTabel.arbNavn
FROM (entreprenørTabel LEFT JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_1) LEFT JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id;

Som giver mig
- alle entreprenørnavne
- sagsnummer
- hvem der har vundet den enkelte sag

Men mangler stadig at få ud hvem der har budt på de enkelte sager. Er der en der har den gyldne finger. Jeg smider gerne flere point i.
Avatar billede tvbrandt Nybegynder
10. juni 2004 - 21:02 #19
Lukket og åbnet som http://www.eksperten.dk/spm/508462 med flere point
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