Avatar billede jpi Mester
27. juli 2011 - 15:29 Der er 25 kommentarer og
1 løsning

Simpel SQL

Hej

Jeg skal have lavet en forespørgsel, der fungerer på følgende måde:

jeg har følgende tabeller (det er selvfølgelig med ID'er osv, men her vist for nemhedens skyld)

tabel biler (Ford, VW, Volvo)
tabel farver (Blå, Rød, Gul)
tabel bilerfarverjoin (Ford/Blå, Ford/Rød, VW/gul, Volvo/Gul)

Jeg vil så gerne kunne vælge en farve f.eks. Rød og så skal resultatet være alle de biler der IKKE har rød (her VW og Volvo)

Hvordan ser SQL'en ud ?
Avatar billede jensen363 Forsker
27. juli 2011 - 15:33 #1
Mener du <>"Rød" i dit kriterie ?
Avatar billede jpi Mester
27. juli 2011 - 15:36 #2
Ja, de biler der IKKE har rød
Avatar billede jensen363 Forsker
27. juli 2011 - 15:38 #3
ELECT DinTabel.Bil, DinTabel.Farve
FROM DinTabel
WHERE (((DinTabel.Farve)<>"Rød"));
Avatar billede mugs Novice
27. juli 2011 - 15:41 #4
Not Like "*rød"
Avatar billede jpi Mester
27. juli 2011 - 15:48 #5
Nej,

Det giver mig stadig bilen Ford/Blå. Resultatet skal ikke indeholde de biler der findes med farven rød.
Avatar billede jensen363 Forsker
27. juli 2011 - 15:56 #6
Hvor er det lige at rød indgår i Ford/Blå ????
Avatar billede michael_stim Ekspert
27. juli 2011 - 16:02 #7
Har du en relation på disse tabeller:?
tabel biler (Ford, VW, Volvo)
tabel farver (Blå, Rød, Gul)
Avatar billede jpi Mester
27. juli 2011 - 16:05 #8
tabellen bilerfarverjoin er en join tabel, der forbinder farver og biler.

Den indeholder pt 4 poster:
Ford/Blå
Ford/Rød
VW/gul
Volvo/Gul

De viser hvilke bil/farvekombinationer der haves.
Nu ønsker jeg at kunne lave en forespørgsel, hvor jeg udfra en given farve får vist de bilmærker som ikke har den farve i udvalget

Hvis farven jeg vælger er rød, så skal det resultat jeg får være alle de bilmærker hvor rød IKKE indgår. I dette tilfælde VW og Volvo, da Ford allerede findes med farven rød.
Avatar billede jpi Mester
27. juli 2011 - 16:06 #9
ja der er en relation mange-til-mange via jointabellen
Avatar billede mugs Novice
27. juli 2011 - 16:12 #10
Så burde mit kriterie fungere.
Avatar billede jpi Mester
27. juli 2011 - 16:18 #11
SELECT join.Biler_ID, join.Farve_ID
FROM [join]
WHERE (((join.Farve_ID) Not Like "*rød"));

Det virker ikke, da Ford/Blå også kommer med...
Avatar billede mugs Novice
27. juli 2011 - 16:26 #12
Du har indsat kriteriet under Farve_Id. n ormalt er et ID-felt tabellens PK og et numerisk felt. Men indeholder Farve_ID kombinationen FORD/blå o.s.v.?
Avatar billede jpi Mester
27. juli 2011 - 16:34 #13
Da det kun er et eksempel har jeg ikke lige lavet numeriske værdier osv.

Her er indholdet af de 3 tabeller:
tabel biler (ID_biler) (Ford, VW, Volvo)
tabel farve (ID_Farve) (Blå, Rød, Gul)
tabel join (biler_ID, farve_ID) (Ford,Blå; Ford,Rød; VW,gul; Volvo,Gul)

Er det forståeligt ?
Avatar billede jpi Mester
27. juli 2011 - 16:42 #14
Vil det gøre en forskel hvis jeg laver de numeriske ID'er osv ?
Avatar billede mugs Novice
27. juli 2011 - 16:50 #15
Det burde ikke gøre nogen forskel med ID. Jeg kan blot ikke forsdtå hvorfor mit kriterie ikke fungerer. Kriteriet:

Not Like "*rød"

Betyder jo, at der gerne må være karakterer til venstre for tekststrengen rød, og er der karakterer, er det ligegyldigt hvilke
Avatar billede jpi Mester
27. juli 2011 - 17:32 #16
Jeg tror du misforstår mig.
I join tabellen er der 4 poster. Hver post indeholder 2felter, at et bilmærke og en farve. Se evt. mit tidligere indlæg med beskrivelse af tabellerne og poster
Avatar billede mugs Novice
27. juli 2011 - 17:56 #17
Det kan godt være, at jeg misforstår sine indlæg. Menjeg er i vildrede med, hvorfor du ikke får de korrekte data, når du indtaster Not Like som kriterie i et felt. Det burde du gøre.

Jeg har ikke så meget tid lige nu, mne er der en mulighed for at se din db i ACC 2003, gerne i en simpliceret form og med en nærmere forklaring?

Send evt. som en .zip fil til:

mugs snabelting bbsyd.dk
Avatar billede jpi Mester
27. juli 2011 - 19:21 #18
Mail på vej...
Avatar billede fdata Forsker
27. juli 2011 - 21:29 #19
I taler vist lidt forbi hinanden.

En enkel løsning kunne være at lave en forespørgsel, der finder alle de mærker, som HAR røde biler:

SELECT BilerFarverRef.*
FROM BilerFarverRef
WHERE (((BilerFarverRef.FarveRef)="Rød"));

... og gemme den f.eks. som Q_BilerRød.

... og så sætte alle mærkerne op mod denne og udvælge, dem der IKKE er repræsenteret:

SELECT Biler.Bilnavn
FROM Biler LEFT JOIN Q_BilerRød ON Biler.Bilnavn = Q_BilerRød.BilRef
WHERE (((Q_BilerRød.FarveRef) Is Null));
Avatar billede jpi Mester
28. juli 2011 - 10:29 #20
Præcist fdata !!!  :-)

Er der en mulighed for i Access at koble de to forespørgsler sammen, så man ikke skal have 2 liggende ?
Avatar billede fdata Forsker
28. juli 2011 - 19:35 #21
Ja da. Så bliver det noget i stil med:

SELECT Biler.Bilnavn
FROM Biler
WHERE (((Biler.Bilnavn) Not In (SELECT BilerFarverRef.BilRef FROM BilerFarverRef WHERE BilerFarverRef.FarveRef="Rød";)));
Avatar billede jpi Mester
29. juli 2011 - 10:06 #22
Det kan jeg ikke får til at virke.
Den fejler på hele WHERE sætningen.

Mangler der ikke noget LEFT JOIN ?
Og kan man overhovedet lave en SELECT inden i en anden SELECT i Access ?
Avatar billede fdata Forsker
30. juli 2011 - 00:53 #23
Hm. Du ville jo gerne have det hele pakket ned i een forespørgsel. Derfor skiftede jeg taktik og gav dig et udtryk, som siger:
"Vælg alle bilnavne, som IKKE er i mængden af de bilnavne, som kan være røde".

Jeg forstår ikke, at det ikke spiller. Udtrykket er klippet direkte ud af min Access SQL visning.

Jeg har 3 tabeller:
  Biler (Bilnavn)
  Farver (FarveNavn)
  BilerFarverRef (BilRef,FarveRef)

Hvis du har de samme tabeller, burde det da virke.
Mystisk?!?
Har du klippe/klistret udtrykket fra mit svar ind i en forespørgsel eller har du skrevet dit eget udtryk?
Hvilken fejl får du?
Avatar billede michael_stim Ekspert
03. august 2011 - 16:57 #24
Er ved at gå mine spørgsmål igennem, og ser at der ikke er lukket her. Har du fået svar på dit spørgsmål, luk da venligst spørgsmålet, ved at afgive point til dem der har været med til at løse dit problem. Jeg selv samler ikke på point, så er det mig der har hjulpet, læg da selv et svar og accepter det.

OBS. Dette er en copy/paste meddelelse, så er der nogen der af en eller anden grund, føler sig stødt, undskylder jeg ;o)
Avatar billede jpi Mester
04. august 2011 - 13:34 #25
fdata:
ndskyld den lange ventetid, der var lige nogle andre ting der kom i vejen.

Din SQL-sætning virker helt fint, kan ikke lige finde ud af hvorfor jeg ikke fik den til at virke sidst.

Mange tak for hjælpen !!!
Avatar billede fdata Forsker
07. august 2011 - 13:04 #26
No problem. Takker for point ;O)
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