Avatar billede uneerup Nybegynder
16. januar 2005 - 15:18 Der er 17 kommentarer og
1 løsning

Problemer med JOIN

Hejsa,
jeg har et problem med en SQL sætning.

Jeg har 2 tabeller. "sommerhuse" den anden "ordre"

Jeg vil nu gerne have vist alle sommerhusene, men de sommerhuse som også findes i "ordre" de skal ikke vises på denne liste.

Hvordan skal den SQL sætning se ud?

Hilsen Uneerup
Avatar billede bleze Nybegynder
16. januar 2005 - 16:57 #1
Noget ala.. kommer jo an på hvad for en DBMS man snakker om. (Dette virker på MSSQL)

select * from sommerhuse where sommerhusID exist in (select sommerhusID from ordre)
Avatar billede uneerup Nybegynder
16. januar 2005 - 17:21 #2
jeg ahr fundet svaret, ellers tak for hjælpen:-)
Avatar billede softspot Forsker
16. januar 2005 - 17:41 #3
Hvad var det så? Måske andre kunne få glæde af det ;)
Avatar billede uneerup Nybegynder
16. januar 2005 - 17:43 #4
well det virkede faktisk ikke alligevel, men jeg er stødt ind i et problem, det kan være du kan hjælpe mig.. skal nok gi point.

"Select * From katalog LEFT JOIN ordre ON (ordre.sommerhusid = katalog.id) and katalog.id=60"

Det her virker fint, men hvis jeg skal hente data fra en tabel mere hvordan gør jeg så? den hedder varegruppe!
Avatar billede softspot Forsker
16. januar 2005 - 17:47 #5
Hvordan er tabellerne bundet sammen (primary keys og foreign keys er vigtigst)?

OG

Hvad skal resultatet være af disse joins?
Avatar billede uneerup Nybegynder
16. januar 2005 - 17:52 #6
varegruppe og katalog er bundet sammen. katalog er en masse sommerhuse med alle de oplysninger der hører til dem.

varegruppe er alle de områder som høre til sommerhusene. Så når jeg bruger ovenstående sql sætning så skriver den alt ud som jeg skal bruge, men jeg mangler lige områdenavn som ligger i varegruppe.

håber det er til at forstå.
Avatar billede softspot Forsker
16. januar 2005 - 18:01 #7
hmm, virker:

SELECT *
FROM  (katalog
LEFT JOIN ordre ON (ordre.sommerhusid = katalog.id) and katalog.id=60)
INNER JOIN varegruppe ON katalog.id = varegruppe.sommerhusid

Dette skulle først udføre en join på alle de sommerhuse der ikke er ordre på og så derefter en join på disse sommerhuse over i tabellen varegruppe... hvis jeg ellers har gættet korrekt :)
Avatar billede softspot Forsker
16. januar 2005 - 18:04 #8
eller er det sådan at der kan være flere sommerhuse i et område...? Hvis det er tilfældet, så skal det nok være sådan her i stedet:

SELECT *
FROM  (katalog
LEFT JOIN ordre ON (ordre.sommerhusid = katalog.id) and katalog.id=60)
INNER JOIN varegruppe ON katalog.varegruppeid = varegruppe.id
Avatar billede softspot Forsker
16. januar 2005 - 18:07 #9
Din løsning finder vel i øvrigt også kun et sommerhus, eller hvad? Jeg opfattede at du skulle bruge alle sommerhuse der ikke er en ordre på... er det forkert? Hvis ikke så skal du vel benytte noget i stil med:

SELECT *
FROM katalog LEFT JOIN ordre ON katalog.id = ordre.sommerhusid
WHERE ordre.id IS NULL

kan være at den sidste linie er anderledes på det aktuelle DBMS, f.eks.

WHERE ordre.id = NULL

eller noget i den stil...
Avatar billede uneerup Nybegynder
16. januar 2005 - 18:10 #10
Jeg havde sat den betingelse på fordi der skal en anden betingelese på senere, der er nemlig en datostart og en datoslut på... men jeg prøver lige den anden sidste sætning du gav mig
Avatar billede uneerup Nybegynder
16. januar 2005 - 18:12 #11
Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Microsoft Access Driver] Join expression not supported.

/vis_liste.asp, line 101


hmm det virker vist ikke
Avatar billede uneerup Nybegynder
16. januar 2005 - 18:14 #12
Men den her virker
"Select * From katalog LEFT JOIN ordre ON (ordre.sommerhusid = katalog.id) where katalog.id=60"

Det eneste jeg skal er at have området med fra tabellen varegruppe.
Avatar billede softspot Forsker
16. januar 2005 - 18:17 #13
Det kan være du bare skal undlade INNER i "INNER JOIN"...
Avatar billede softspot Forsker
16. januar 2005 - 18:26 #14
Næh... det ser ud til at fungerer godt nok i Access... hmmm
Avatar billede uneerup Nybegynder
16. januar 2005 - 18:26 #15
"SELECT * FROM  (katalog LEFT JOIN ordre ON (ordre.sommerhusid = katalog.id)) INNER JOIN varegruppe ON katalog.omraadeid = varegruppe.omraadeid where katalog.id=60"
Avatar billede uneerup Nybegynder
16. januar 2005 - 18:27 #16
det virker sådan der, hvordan giver jeg dig nu point, skal jeg oprette et nyt spg
Avatar billede softspot Forsker
16. januar 2005 - 18:33 #17
Kan du ikke bare give mig noget karma i stedet, så kan du beholde point til en anden god gang :)
Avatar billede uneerup Nybegynder
16. januar 2005 - 18:35 #18
sådan, tak for det :-)
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
Kurser inden for grundlæggende programmering

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