/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
3 x joins i SQL
Fra : Ukendt


Dato : 28-07-03 19:44

Hej.

Jeg har denne SQL streng:
Select navn, ting From lomme Inner Join ting On lomme.ting = ting.id Where
lomme.ejer = (Select id from brugere Where brugernavn = 'myname')

Som i kan se er der en indlejret forespørgsel i min Select fordi jeg skal
hente data fra 3 tabeller, men hvordan kan man joine 3 tabeller, så jeg
slipper for en indlejrede forespørgsel?



 
 
Jens Gyldenkærne Cla~ (28-07-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 28-07-03 20:48

*XxX* skrev:

> Select navn, ting From lomme Inner Join ting On lomme.ting =
> ting.id Where lomme.ejer = (Select id from brugere Where
> brugernavn = 'myname')

> ...hvordan kan man joine 3 tabeller, så jeg slipper for en
> indlejrede forespørgsel?

SELECT navn, ting
FROM lomme l INNER JOIN ting t ON l.ting = t.id
INNER JOIN brugere b ON l.ejer = b.id
WHERE b.brugernavn = 'myname'


Hvis din database ikke understøtter aliaser kan det samme skrives
således:

SELECT navn, ting
FROM lomme INNER JOIN ting ON lomme.ting = ting.id
INNER JOIN brugere ON lomme.ejer = brugere.id
WHERE brugere.brugernavn = 'myname'

Afhængig af om der er feltnavnesammenfald i nogle af tabellerne kan
du blive nødt til at præfikse de kolonner du henter (altså "SELECT
l.navn, t.ting" i stedet for "SELECT navn, ting")
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Ukendt (28-07-2003)
Kommentar
Fra : Ukendt


Dato : 28-07-03 21:37

> SELECT navn, ting
> FROM lomme l INNER JOIN ting t ON l.ting = t.id
> INNER JOIN brugere b ON l.ejer = b.id
> WHERE b.brugernavn = 'myname'

Jeg syns jeg har prøvet det der med innerjoin efter den anden og det ville
ikke virke, men kan da godt prøve igen

>
>
> Hvis din database ikke understøtter aliaser kan det samme skrives
> således:

gør den.

>
> SELECT navn, ting
> FROM lomme INNER JOIN ting ON lomme.ting = ting.id
> INNER JOIN brugere ON lomme.ejer = brugere.id
> WHERE brugere.brugernavn = 'myname'
>



Jørn Andersen (29-07-2003)
Kommentar
Fra : Jørn Andersen


Dato : 29-07-03 05:20

On Mon, 28 Jul 2003 22:36:54 +0200, "*XxX*"
<fatman00hot-at-hotmail.com> wrote:

>> SELECT navn, ting
>> FROM lomme l INNER JOIN ting t ON l.ting = t.id
>> INNER JOIN brugere b ON l.ejer = b.id
>> WHERE b.brugernavn = 'myname'
>
>Jeg syns jeg har prøvet det der med innerjoin efter den anden og det ville
>ikke virke, men kan da godt prøve igen

Hvis det er Access db, og man har det lidt svært med at overskue lidt
mere kompleks SQL (som jeg), så lav en forespørgsel i QBE-gitteret.
Når den virker som den skal, så kopierer SQL'en herfra - der er nogle
ganske få syntaks-forskelle ("," i stedet for ";" etc.)

Good luck!

--
Jørn Andersen,
Brønshøj

Ukendt (29-07-2003)
Kommentar
Fra : Ukendt


Dato : 29-07-03 10:44


> Hvis det er Access db, og man har det lidt svært med at overskue lidt
> mere kompleks SQL (som jeg), så lav en forespørgsel i QBE-gitteret.
> Når den virker som den skal, så kopierer SQL'en herfra - der er nogle
> ganske få syntaks-forskelle ("," i stedet for ";" etc.)
>
> Good luck!
>
Jeg har aldrig brugt access til at lave mine SQL sætning så det ved jeg ikke
hvordan man gør og har heller ikke brug for det p.t.



Ukendt (28-07-2003)
Kommentar
Fra : Ukendt


Dato : 28-07-03 21:41


>
> SELECT navn, ting
> FROM lomme INNER JOIN ting ON lomme.ting = ting.id
> INNER JOIN brugere ON lomme.ejer = brugere.id
> WHERE brugere.brugernavn = 'myname'
>

får fejlen:
Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in
query expression 'lomme.ting = ting.id INNER JOIN brugere ON lomme.ejer =
brugere.id'.



Ukendt (28-07-2003)
Kommentar
Fra : Ukendt


Dato : 28-07-03 21:54


"*XxX*" <fatman00hot-at-hotmail.com> skrev i en meddelelse
news:3f2589e8$0$24693$edfadb0f@dread14.news.tele.dk...
>
> >
> > SELECT navn, ting
> > FROM lomme INNER JOIN ting ON lomme.ting = ting.id
> > INNER JOIN brugere ON lomme.ejer = brugere.id
> > WHERE brugere.brugernavn = 'myname'
> >
>
> får fejlen:
> Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator)
in
> query expression 'lomme.ting = ting.id INNER JOIN brugere ON lomme.ejer =
> brugere.id'.
Nu har jeg også prøvet at bytte om på inner join og sat dem i paranteser som
der stod i en bog jeg fandt; jeg har også brugt format$ til at lave et
autonummer om til en tekst streng, så kommer koden til at se sådan her ud:

SELECT lomme.ting, ting.navn
FROM (brugere INNER JOIN lomme ON lomme.ejer
=
format$(brugere.id) WHERE brugere.brugernavn
= 'myname')
INNER JOIN ting ON lomme.ting = ting.id

og får fejlen:
[Microsoft][ODBC Microsoft Access Driver] Syntax error in JOIN operation.


HJÆLP
>
>



Ukendt (28-07-2003)
Kommentar
Fra : Ukendt


Dato : 28-07-03 22:01


>
> SELECT navn, ting
> FROM lomme l INNER JOIN ting t ON l.ting = t.id
> INNER JOIN brugere b ON l.ejer = b.id
> WHERE b.brugernavn = 'myname'
>
>
> Hvis din database ikke understøtter aliaser kan det samme skrives
> således:
>
> SELECT navn, ting
> FROM lomme INNER JOIN ting ON lomme.ting = ting.id
> INNER JOIN brugere ON lomme.ejer = brugere.id
> WHERE brugere.brugernavn = 'myname'

Jeg har fået det til at virke der var jo en type mismatch som jeg rettede
med format$(), men til dig jens så når man laver join af flere tabbel er end
2 så skal man bruger parateser, så her er den som den virker:

SELECT navn, ting
FROM (lomme INNER JOIN ting ON lomme.ting =
ting.id)
INNER JOIN brugere ON lomme.ejer =
format$(brugere.id)
WHERE brugere.brugernavn = 'myname'

Ja så ved vi det.



Jens Gyldenkærne Cla~ (28-07-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 28-07-03 22:07

*XxX* skrev:

> får fejlen:
> Microsoft][ODBC Microsoft Access Driver] Syntax error (missing
> operator) in query expression 'lomme.ting = ting.id INNER JOIN
> brugere ON lomme.ejer = brugere.id'.

Må vi se den præcise sql-sætning?

NB: Hvilken version af Access drejer det sig om?
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (28-07-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 28-07-03 22:25

*XxX* skrev:

> Jeg har fået det til at virke der var jo en type mismatch som
> jeg rettede med format$(),

Det er en god ide at have joinfelter i samme felttype - så slipper
man for at rette formatet når man skal sammenkæde, og man får
desuden mulighed for at benytte referentiel integritet mellem
tabellerne.

> men til dig jens så når man laver
> join af flere tabbel er end 2 så skal man bruger parateser

Det har du tilsyneladende ret i. Jeg var overbevist om at Access
(ligesom MSSQL) understøttede efterstillede joins (uden
parenteser), men det er ikke tilfældet.

Det er længe siden jeg har arbejdet med Access så min viden er sine
steder lidt hullet - beklager.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste