Avatar billede krogstrup Nybegynder
14. maj 2004 - 15:46 Der er 13 kommentarer og
1 løsning

Flere INNER JOINS i samme SQL sætning mod Access database

Jeg har brug for at lave 2 INNER JOINS i samme SQL sætning mod en Access database.

Laver jeg SQL´en med een INNER JOIN, således:

SELECT recipes.recipes_id,recipes.recipes_username,recipes.recipes_title,recipetypes.recipetypes_name,foodtypes.foodtypes_name FROM recipes INNER JOIN recipetypes ON recipes.recipes_recipetype = recipetypes.recipetypes_id

...så fungerer det fint !

Men så snart jeg lægger 2. INNER JOIN ind, virker det ikke !?!

SELECT recipes.recipes_id,recipes.recipes_username,recipes.recipes_title,recipetypes.recipetypes_name,foodtypes.foodtypes_name FROM recipes INNER JOIN recipetypes ON recipes.recipes_recipetype = recipetypes.recipetypes_id INNER JOIN foodtypes ON recipes.recipes_foodtype = foodtypes.foodtypes_id

Hvad gør jeg galt ?!?
Avatar billede krogstrup Nybegynder
14. maj 2004 - 15:46 #1
Fejltype:
Microsoft JET Database Engine (0x80040E14)
Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "recipes.recipes_recipetype = recipetypes.recipetypes_id INNER JOIN foodtypes ON recipes.recipes_foodtype = foodtypes.foodtypes_id".
Avatar billede krogstrup Nybegynder
14. maj 2004 - 16:02 #2
her en mere overskuelig udgave af min fulde SQL string:


SELECT recipes.recipes_id,recipes.recipes_username,recipes.recipes_title,recipetypes.recipetypes_name,foodtypes.foodtypes_name

FROM recipes

INNER JOIN recipetypes ON recipes.recipes_recipetype = recipetypes.recipetypes_id

INNER JOIN foodtypes ON recipes.recipes_foodtype = foodtypes.foodtypes_id

ORDER BY recipes.recipes_title
Avatar billede overchord Nybegynder
14. maj 2004 - 17:18 #3
Du skal have et saet paranteser omkring den anden inner join

...FROM recipetypes INNER JOIN (recipes INNER JOIN foodtypes ON recipes.recipes_foodtype = foodtypes.foodtypes_id) ON recipes.recipes_recipetype = recipetypes.recipetypes_id
Avatar billede krogstrup Nybegynder
14. maj 2004 - 17:41 #4
hmmm - kan ikke helt få det til at virke.

Kan jeg få dig til at skrive den fulde SQL sætning ?
Avatar billede krogstrup Nybegynder
14. maj 2004 - 17:44 #5
dette virker ikke:

SELECT recipes.recipes_id,recipes.recipes_username,recipes.recipes_title,recipetypes.recipetypes_name,foodtypes.foodtypes_name FROM recipes INNER JOIN ( INNER JOIN foodtypes ON recipes.recipes_foodtype = foodtypes.foodtypes_id) ON recipes.recipes_recipetype = recipetypes.recipetypes_id
Avatar billede krogstrup Nybegynder
14. maj 2004 - 17:45 #6
sorry - skulle have været: (som heller ikke virker)

SELECT recipes.recipes_id,recipes.recipes_username,recipes.recipes_title,recipetypes.recipetypes_name,foodtypes.foodtypes_name FROM recipes INNER JOIN (recipes INNER JOIN foodtypes ON recipes.recipes_foodtype = foodtypes.foodtypes_id) ON recipes.recipes_recipetype = recipetypes.recipetypes_id
Avatar billede krogstrup Nybegynder
14. maj 2004 - 17:50 #7
aah - sorry.

jeg havde lige overset at du havde ændret på FROM table

nu virker det !
Avatar billede krogstrup Nybegynder
14. maj 2004 - 17:53 #8
hmmm - det virker, men jeg har godt nok svært ved at forstå syntaxen....

irriterende :-)
Avatar billede krogstrup Nybegynder
14. maj 2004 - 18:10 #9
overchord >>>

Kunne du muligvis overtales til at give mig en forklaring på hvorfor ovenstående JOIN skal konstrueres på lige netop den måde ?

F.eks. forstår jeg ikke hvorfor FROM table er nødt til at være recipetypes og ikke recipes ?!?
Avatar billede overchord Nybegynder
14. maj 2004 - 18:24 #10
krogstrup >>
Som jeg forstaar der er det simpelthen fordi SQL syntaksen for inner join kun kan haandtere to "objekter". Disse "objekter" kan saa godt vaere yderligere nestede joins af andre tabeller, men ultimativt kan syntaksen kun opfatte de to. Samtidigt ville du ved at oprette to uafhaengige inner joins (selvom de reelt set er afhaengige gennem recipes i dit tilfaelde) kunne skrive en lovlig SQL syntaks mellem tabeller der ikke ville have nogen relation (eks Tabel 1 inner joines paa tabel 2 i samme saetning som tabel 3 inner joined paa tabel 4). Saa jeg gaar ud fra at det er derfor denne syntaks er ulovlig.
Haaber det giver lidt mening!
Takker for point - og smid en besked hvis det stadig er helt sort.
Avatar billede overchord Nybegynder
14. maj 2004 - 18:26 #11
mht til at jeg satte FROM recipetypes istedet for ercipes, er at det er recipe-tabellen som har relation til begge tabellerne. Derfor er recipe-tabellen noed til at indgaa  i den nestede inner join og derefter "igen" i den foerste join.
Avatar billede krogstrup Nybegynder
14. maj 2004 - 23:48 #12
hej igen overchord >>>

Hvis du er oppe og online på dette tidspunkt (eller hvornår du nu engang læser dette) må du meget gerne kigge her:

http://exp.dk/spm/498469
Avatar billede krogstrup Nybegynder
14. maj 2004 - 23:48 #13
I øvrigt: tak for dine forklaringer !

Jeg må dog indrømme at jeg stadig ikke helt forstår logikken...
Avatar billede overchord Nybegynder
16. maj 2004 - 16:12 #14
krogstrup - det ser ud til at eagleeye fik hjulpet med flere nestede loops :-)
Den maade jeg har fundet nemmest at laere "logikken" til at starte med er et bruge access' indbyggede query-builder og derefter vise den byggede Query som SQL. Det kan forhaabentligt give dig lidt ideer omkring hvordan det normalt sammensaettes :-)
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