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

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Fatter nada
Fra : Steffen Møller


Dato : 17-01-01 01:42

Jeg er ved at tage et databasekursus....

Jeg skal lave en sql forspørgsel i 2 tabeler hvor jeg skal trække Id
ud fra de to nedenstående tabeler hvor Årskar > Prøve og Prøve > 93

SELECT Almuegym.Id, Mellemgym.Id
FROM Almuegym , Mellemgym
WHERE Almuegym.Årskar > Almuegym.Prøve AND Mellemgym.Årskar >
Mellemgym.Prøve;

Men det duer ikke - der kommer 35 records ud...

Det skal iøvrigt siges at Prøve > 93 har jeg lavet tidligere som
SELECT Id, Afgang, Karakter, Egnet
FROM Folkeskole
WHERE karakter > 93;

What to do? En forklaring i stedet for en løsning vil være at
foretrække

Møller


Mellemgym
Id   Linie   Årskar   Prøve
601   M   89   94
603   M   71   66
605   M   89   82
607   M   79   92
609   M   82   76
611   M   73   82
613   M   81   80
615   M   84   92
617   M   88   98
619   M   79   84
621   M   78   92
623   M   87   80

Almuegym
Id   Linie   Årskar   Prøve
101   S   82   73
103   S   67   68
105   S      
107   S   107   98
109   S   96   97
111   S   89   83
113   S   79   83
115   S   71   68
117   S   73   73
119   S   78   78
121   S   88   85
123   S   87   85
125   S   82   78

 
 
James Olsen (17-01-2001)
Kommentar
Fra : James Olsen


Dato : 17-01-01 07:13


"Steffen Møller" <steffen.moeller@mail.com> wrote in message
news:t2q96t0ntkshn1o97rjjgvq4ouh0hhnhg7@4ax.com...
> Jeg er ved at tage et databasekursus....
>
> Jeg skal lave en sql forspørgsel i 2 tabeler hvor jeg skal trække Id
> ud fra de to nedenstående tabeler hvor Årskar > Prøve og Prøve > 93
>
> SELECT Almuegym.Id, Mellemgym.Id
> FROM Almuegym , Mellemgym
> WHERE Almuegym.Årskar > Almuegym.Prøve AND Mellemgym.Årskar >
> Mellemgym.Prøve;
>
> Men det duer ikke - der kommer 35 records ud...

Dit problem er at du ikke har en join condition i dit statement, da du ikke
har det får du produktet af de to tabeller Almuegym og Mellemgym.

generelt ser det sådan her ud hvis du skal joine to tabeller SELECT
<columns> FROM <table1> INNER JOIN <table2> ON (<join-condition>) FROM
<search-condition>. Bemærk at join-condition skal være en "beskrivelse" af
hvilke kolonner i de to tabeller som skal bruges til at "binde" dem sammen.
>
> Det skal iøvrigt siges at Prøve > 93 har jeg lavet tidligere som
> SELECT Id, Afgang, Karakter, Egnet
> FROM Folkeskole
> WHERE karakter > 93;

Fungere fordi du kun har en tabel

>
> What to do? En forklaring i stedet for en løsning vil være at
> foretrække

Ok, har prøvet med en forklaring istedet for en løsning - så håber jeg bare
den er til at forstå.

>
> Møller
>
>
> Mellemgym
> Id Linie Årskar Prøve
> 601 M 89 94
> 603 M 71 66
> 605 M 89 82
> 607 M 79 92
> 609 M 82 76
> 611 M 73 82
> 613 M 81 80
> 615 M 84 92
> 617 M 88 98
> 619 M 79 84
> 621 M 78 92
> 623 M 87 80
>
> Almuegym
> Id Linie Årskar Prøve
> 101 S 82 73
> 103 S 67 68
> 105 S
> 107 S 107 98
> 109 S 96 97
> 111 S 89 83
> 113 S 79 83
> 115 S 71 68
> 117 S 73 73
> 119 S 78 78
> 121 S 88 85
> 123 S 87 85
> 125 S 82 78



Jens Gyldenkærne Cla~ (17-01-2001)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 17-01-01 10:46

"James Olsen" <james_olsen@vip.cybercity.dk> skrev:
>
>[...] generelt ser det sådan her ud hvis du skal joine to tabeller
>SELECT <columns> FROM <table1> INNER JOIN <table2> ON
> (<join-condition>) FROM <search-condition>

Det sidste FROM er forkert - det skal være WHERE. Ellers en god
forklaring. Du kunne evt. også forklare syntaksen i
(<join-condition>): (<table1>.<joinfield1> = <table2>.<joinfield2>)

PS: Husk lige at klippe i citaterne.
--
Jens Gyldenkærne Clausen


Steffen Møller (18-01-2001)
Kommentar
Fra : Steffen Møller


Dato : 18-01-01 00:23

>Dit problem er at du ikke har en join condition i dit statement, da du ikke
>har det får du produktet af de to tabeller Almuegym og Mellemgym.

Det var også det jeg regnede med.

>generelt ser det sådan her ud hvis du skal joine to tabeller SELECT
><columns> FROM <table1> INNER JOIN <table2> ON (<join-condition>) FROM
><search-condition>. Bemærk at join-condition skal være en "beskrivelse" af
>hvilke kolonner i de to tabeller som skal bruges til at "binde" dem sammen.

okay, men hvad er en join condition? Jeg kiggede også på det link som
Peter Lykkegaard var kommet med, og der ligner join conditionen mere
noget taget fra WHERE clausen. Jeg har fået sqltut fra
http://w3.one.net/~jhoffman/sqltut.htm, men join sektionen er ikke
noget værd. Det ser ellers ud til at join er ret vigtig..

>Ok, har prøvet med en forklaring istedet for en løsning - så håber jeg bare
>den er til at forstå.

Den er skam fin - jeg er stadig bare ikke helt med

Møller

James Olsen (18-01-2001)
Kommentar
Fra : James Olsen


Dato : 18-01-01 07:39


"Steffen Møller" <steffen.moeller@mail.com> wrote in message
news:3a9c6t0ie64didnmlak1jql9k72j5v5eh3@4ax.com...

> okay, men hvad er en join condition?

Det er en beskrivelse af hvordan to tabeller hænger sammen. Det vil sige
hvilke to kolonner skal SQL-processoren bruge til at kæde rækker i den ene
tabel sammen med rækker i den anden tabel.

Hvis jeg nu har en tabel med forfattere og en med bøger som neden for :

Tabel Forfattere

id ! Navn
-----------
1 Ron Soukup
2 Steve McConnel

Tabel Boeger

ForfatterId ! Navn
-------------------
1 Inside SQL Server
2 Code Complete
2 Rapid Development

Ønsker jeg nu at se hvilke bøger som Steve McConnel har skrevet ville jeg
lave et select-statement som følger :

SELECT b.Navn FROM forfattere as f INNER JOIN boeger as b on (f.id =
b.ForfatterId) WHERE f.Navn = 'Steve McConnel'

Dette vil resultere i en liste med

Navn
-----------------
Code Complete
Rapid Development

Som du kan se er det vigtigt at der er en kolonne i hver tabel som kan
bruges til at beskrive sammenhængen. Bemærk også at det oftest er en god ide
at lave alias (fx forfattere as f, hvor f bliver alias for tabelnavnet
forfattere) da du skal kunne skilde kolonne navne i flere tabeller fra
hinanden, hvilket gøres ved at prefixe med tabelnavn eller aliasnavn som
oftest er noget lettere at skrive.

> Jeg kiggede også på det link som
> Peter Lykkegaard var kommet med, og der ligner join conditionen mere
> noget taget fra WHERE clausen. Jeg har fået sqltut fra
> http://w3.one.net/~jhoffman/sqltut.htm, men join sektionen er ikke
> noget værd. Det ser ellers ud til at join er ret vigtig..

Man kan i de fleste SQL-server produkter godt join i where clausen, det skal
du bare vide er sådan så du kan læse "gammel" kode. Du skal dog holde dig
fra den teknik da den ikke er særlig klar i sit udtryk og samtidigt har
nogle problemer i forbindelse med bestemte udtryk (du kan fx ikke right
eller left joine med en betingelse som ikke er equal, hvis det er noget som
du gerne vil grave lidt mere i kan du finde det i bogen : Joe Celko's SQL
for smarties).

Jeg prøvede lige at lure på de tabeller som du havde vedlagt i den første
post og jeg kunne ikke finde nogen kolonner som kunne bruges til at kæde
tabellerne sammen og ved nærmere eftertanke er det måske slet ikke det du
har brug for. Det kunne se ud til at du skal bruge en union som sådan her :

SELECT Almuegym.Id
FROM Almuegym
WHERE Almuegym.Årskar > Almuegym.Prøve AND Almuegym.Prøve > 93
UNION ALL
SELECT Mellemgym.Id
FROM Mellemgym
WHERE Mellemgym.Årskar > Mellemgym.Prøve AND Mellemgym.Prøve > 93

Er det ikke det du skal bruge ?





Peter Lykkegaard (17-01-2001)
Kommentar
Fra : Peter Lykkegaard


Dato : 17-01-01 10:59


"Steffen Møller" <steffen.moeller@mail.com> wrote in message
news:t2q96t0ntkshn1o97rjjgvq4ouh0hhnhg7@4ax.com...
>
> What to do? En forklaring i stedet for en løsning vil være at
> foretrække
>
Du kan evt kikkelidt på den her
http://www.cit.teknologisk.dk/brugergrupper/accesserfa/videnbase/Kodeeksempl
er/sql/8Select.txt

mvh/Peter Lykkegaard



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

Månedens bedste
Årets bedste
Sidste års bedste