Avatar billede peanut2000 Nybegynder
01. marts 2004 - 12:30 Der er 11 kommentarer og
1 løsning

Har problemer med en sql-sætning (UNION)

Hej jeg skal lave et slags skema over hvornår der rides på en rideskole, her gælder det at et medlem modtager undervisning, nogle medlemmer skal have hjælpere som jeg kalder traekker, disse trækkere er medlemmer der er blevet oplært som traekker (dvs. at medlem er medlem, men kan også være traekker)
Mit problem er at jeg skal have vist følgende
Tid, medlemsnr, medlemsnavn, hestnavn, traekkerid, traekkernavn, udstyr.
Men det er ikke altid der er en trækker med udstyr tilknyttet, så jeg er nået frem til at jeg skal bruge UNION og at jeg skal bruge 2 select-sætninger, hvor jeg skal sætte nogle af felterne til Null.

Her er foreløbig hvad jeg er kommet frem til:

SELECT K.Tid, U.Medlemsnr, M.Navn, H.Navn, NULL As Traekkerid, NULL As Type
FROM Kalender AS K, Medlem AS M, Undervisning AS U, Hest AS H, Arbejde AS A
WHERE K.Lektionsnr = U.Lektionsnr AND M.Medlemsnr = U.Medlemsnr AND H.Hesteid = U.Hesteid;
UNION SELECT K.Tid, U.Medlemsnr, M.Navn, H.Navn, A.Traekkerid, UD.Type
FROM Kalender AS K, Arbejde AS A, Traekker AS T, Medlem AS M, Udstyr AS U
WHERE  K.Lektionsnr = A.Lektionsnr AND A.Traekkerid = T.Traekkerid AND T.Medlemsnr = M.Medlemsnr;

Kommer med følgende fejl:
Indtast parameterværdi H.Navn & UD.Type
NB. jeg har ikke fået traekkernavn tilføjet, som skal komme fra medlemstabellen

Jeg har følgende tabeller:

Kalender:
Lektionsnr (nøgle)
Dato
Tid

Undervisning:
Undervisningsnr (nøgle)
Lektionsnr
Medlemsnr
Hesteid

Medlem:
Medlemsnr (nøgle)
Navn

Udstyr:
Udstyrrsid (nøgle)
Medlemsnr
Type

Arbejde:
Arbejdsid (nøgle)
Lektionsnr
Traekkerid

Traekker:
Traekkerid (nøgle)
Medlemsnr

Hest:
Hesteid (nøgle)
Navn

Håber at der er nogen der kan hjælpe
Avatar billede terry Ekspert
01. marts 2004 - 12:43 #1
Without looking at this in detail then I noticed that you have a ; AFTER the frist SELECT so try removing thsi. Also, make sure that fields (columns)  from both selects have the same type.

If you dont get an answer then if its possible for you to send me your dB then I can maybe see the problem NOSPAMeksperten@santhell.dkNOSPAM, when I get home from work.

remove NOSPAM
Avatar billede terry Ekspert
01. marts 2004 - 12:57 #2
First you should make sure that each individual SQL returns what you want and then make the union query (without ; between)
Use teh query builder for this, and inseated of using (WHERE K.Lektionsnr = U.Lektionsnr) use INNER JOIN's
Avatar billede peanut2000 Nybegynder
01. marts 2004 - 13:12 #3
Tak har sendt db til dig
Avatar billede peanut2000 Nybegynder
01. marts 2004 - 14:05 #4
Kan ikke få det til at virke
Avatar billede terry Ekspert
01. marts 2004 - 14:26 #5
I'll take a look later!
Avatar billede proaccess Nybegynder
01. marts 2004 - 14:29 #6
Der er følgende fejl:

1) Du har et ; lige før UNION, det skal slettes.
2) I anden SELECT referer du til tabellen Udstyr med U, men bruger UD.Type.
3) I anden SELECT referer du til H.navn, uden at have taget tabellen Hest med.
Avatar billede terry Ekspert
01. marts 2004 - 16:36 #7
peanut2000>I suggest you look at praaccess' answer! You need to make sure that all tables which you SELECT values from are included in the FROM and WHERE.

I dont know enough about your table design to decide which tables are needed in the query to give you waht ayou want. I have attempted to make a query but I get NO records in the result, so obvioulsy the realtionships I am using are wrong!
Avatar billede peanut2000 Nybegynder
01. marts 2004 - 17:08 #8
proaccess> Det hjalp lidt, men ikke helt, Jeg har nu følgende:

SELECT K.Tid, U.Medlemsnr, M.Navn, H.Navn, NULL As Traekkerid, NULL As Type
FROM Kalender AS K, Medlem AS M, Undervisning AS U, Hest AS H, Arbejde AS A
WHERE K.Lektionsnr = U.Lektionsnr AND M.Medlemsnr = U.Medlemsnr AND H.Hesteid = U.Hesteid
UNION SELECT K.Tid, U.Medlemsnr, M.Navn, H.Navn,  A.Traekkerid, UD.Type
FROM Kalender AS K, Arbejde AS A, Traekker AS T, Medlem AS M, Udstyr AS UD, Undervisning As U, Hest As H
WHERE  K.Lektionsnr = A.Lektionsnr AND A.Traekkerid = T.Traekkerid  AND U.Medlemsnr = M.Medlemsnr AND U.Hesteid = H.Hesteid AND M.Medlemsnr = UD.Medlemsnr;

Giver følgende fejl:
Skriver samme to rækker 2 gange (nedenfor er vist hvordan (rækkerne viser altså samme data, men under trækkerid vises en firkant i stedet for et tal?))
Tid, medlemsnr, medlemsnavn, hestenavn
Tid, medlemsnr, medlemsnavn, hestenavn, traekkerid, type(udstyr)
02. marts 2004 - 09:00 #9
Hvad søren, Proaccess!!? Skulle jeg virkelig tage dig i en fejl-udtalelse?

Semikolon før UNION er helt legalt, da begge sider af en UNION kan indeholde en fuld SQL sætning (inkl. semikolon for Access' vedkommende)

Miraklernes tid er endnu ikke forbi ;o)
Avatar billede proaccess Nybegynder
02. marts 2004 - 09:20 #10
>Thomas: Det var jeg sgu' ikke klar over... ;0(
Jeg er altid gået frem efter at det var Access-standard kun at have ; i slutningen af sætningen. (Og samtidig at det var SQL-standard ikke at have det overhovedet)

Det gør dog absolut ingen forskel om ; er med eller ej! (Access sætter det dog selv ind sidst i den SAMLEDE sætning)
Avatar billede peanut2000 Nybegynder
02. marts 2004 - 10:24 #11
Det er fedt nok i retter hinanden frem og tilbage, men det løser ikke mit problem, HJÆÆÆÆÆÆLP
Avatar billede proaccess Nybegynder
02. marts 2004 - 10:39 #12
Jeg vil ikke have point, hvis du ikke er blevet hjulpet...

Læg et svar på http://www.eksperten.dk/spm/472025
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