Avatar billede peanut2000 Nybegynder
02. marts 2004 - 13:18 Der er 14 kommentarer og
1 løsning

SQL-sætning med 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 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;

Kommer med følgende fejl:
Den skriver samme sætning 2 gange ud fra samme medlem (med og uden trækker, udstyr), hvor trækkerid vises som en lille firkant - er der nogen der kender denne fejl???
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, mig, så jeg får vist mine medlemmer rigtigt.
Hvis der ikke er nogen trækker kan der evt. stå
Tid, medlemsnr, medlemsnavn, hestenavn
10.00 10        Per          Queen
Hvis der er trækker tilknyttet medlem
Tid, medlemsnr, medlemsnavn, hestenavn, traekkerid, udstyr
10.00 10        Per          Queen      2          saddel
Avatar billede ldanielsen Nybegynder
02. marts 2004 - 13:40 #1
Du skal bruge joins, og så skal du lave OUTER JOIN til Traekker.

Lav din forespørgsel i access, så bliver det let at styre.

Fidusen er at tabellen Medlem skal joines to gange, den ene gang med alias fx. MedlemTraekker, og den skal her være bag et OUTER JOIN.

OUTER JOIN's lave i Access ved at højreklikke på "forbindelsen" og vælge "Vælg alt fra ..."
Avatar billede peanut2000 Nybegynder
02. marts 2004 - 16:52 #2
Idanielsen> Jeg kender ikke noget til joins, har aldrig lavet sql med joins, måske du kan være lidt mere præcis?
Avatar billede terry Ekspert
02. marts 2004 - 17:31 #3
peanuts2000>I will see if I can find time to look at this but I may have a few questions first.
Avatar billede hekla Nybegynder
02. marts 2004 - 17:33 #4
Prøv med:

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 AND ((A.traekkerid) Is Null)
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 AND ((A.traekkerid) Is Not Null);

Jeg har tilføjet:  AND ((A.traekkerid) Is Null) og  AND ((A.traekkerid) Is Not Null)
Avatar billede peanut2000 Nybegynder
02. marts 2004 - 18:35 #5
terry> du spørger bare løs
Avatar billede peanut2000 Nybegynder
02. marts 2004 - 18:38 #6
Hekla> Nu viser den godt nok kun det samme medlem en gang med trækker, hvor den før viste 2 (med og uden trækker), men nu viser den ikke de andre medlemmer uden trækker?
Avatar billede peanut2000 Nybegynder
02. marts 2004 - 18:39 #7
Hekla> Samtidig med er der stadig en firkant under feltet trækkerid, den burde vise et tal?
Avatar billede hekla Nybegynder
02. marts 2004 - 18:45 #8
Du kan prøve at sende den til mig. Så skal jeg kigge på den.
NOSPAMklaus@roelsgaard.dkNOSPAM
Avatar billede terry Ekspert
02. marts 2004 - 19:42 #9
peanut2000>Lets see if hekla can get it working first, if not send me a mail
NOSPAMeksperten@santhell.dkNOSPAM

remove NOSPAM

(no promises I can though :o) )
Avatar billede ldanielsen Nybegynder
03. marts 2004 - 09:15 #10
Jeg er sikker på at terry eller en af de andre kan lave det, jeg har desværre selv dårligt tid, men jeg synes lige at du skal notere dig at joins er noget du skal lære.

Hvis du åbner en accessfil, og laver en ny forespørgsel i designvisning, så er du på rette vej.

Din datastruktur ser meget rigtig ud, og Access vil selv danne de joins den mener er rigtige, repræsenteres med linier mellem tabellerne. Du kan slette rette og oprette nye efter behov.

God arbejdslyst.

PS: Jeg er 99,9% sikker på at løsningen med UNION ikke vil være det rigtige, man kan ikke lige overskue om det evt. vil kunne lade sig gøre.
Avatar billede peanut2000 Nybegynder
03. marts 2004 - 09:30 #11
hekla> Jeg har sendt den en gang før, du sagde at du ikke kunne løse den?
Avatar billede hekla Nybegynder
03. marts 2004 - 16:52 #12
??? Det kan jeg ikke huske eller finde tilbage til. Tror du ikke at det har været en anden?
Avatar billede hekla Nybegynder
05. marts 2004 - 18:39 #13
.
Avatar billede terry Ekspert
07. marts 2004 - 17:48 #14
whats the status here?
Avatar billede peanut2000 Nybegynder
09. marts 2004 - 13:55 #15
Jeg har selv løst mit problem
Her er løsningen:
SELECT Distinct K.Tid, U.Medlemsnr, P.Navn, UD.Type, H.Navn, NULL As Traekkerid
FROM Kalender AS K, Undervisning AS U, Medlem AS M, Person AS P, Udstyr AS UD, Hest AS H, Arbejde AS A
WHERE K.Lektionsnr = U.Lektionsnr
  AND U.Medlemsnr = M.Medlemsnr
  AND M.Personid = P.Personid
  AND U.Udstyrsid = UD.Udstyrsid
  AND U.Hesteid = H.Hesteid
  AND K.Lektionsnr NOT IN(
      select Arbejde.Lektionsnr
      FROM Kalender, Arbejde
      WHERE Kalender.Lektionsnr = Arbejde.Lektionsnr)

UNION SELECT K.Tid, U.Medlemsnr, P.Navn, UD.Type, H.Navn, A.Traekkerid
FROM Kalender AS K, Undervisning AS U, Medlem AS M, Person AS P, Udstyr AS UD, Hest AS H, Arbejde AS A
WHERE U.Medlemsnr=M.Medlemsnr
  AND K.Lektionsnr=U.Lektionsnr
  AND K.Lektionsnr=A.Lektionsnr
  AND M.Personid=P.Personid
  AND U.Udstyrsid=UD.Udstyrsid
  AND U.Hesteid=H.Hesteid;

Men ellers tak for hjælpen
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