/ 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
[MySqQL] Problem med JOIN
Fra : P.E. Nikolajsen


Dato : 23-11-05 00:09

Jeg har to tabeller som skal joines:

Alt fra tabel 1 skal med
Tabel 2 skal summeres efter forskellige kritetier (select id, sum(a), sum(b)
from tab2 where dato = '' group by id)

tabel 1 indeholder måske 125 poster og den summerede tabel 2 måske 10 -
hvilket betyder at nogle poster i den endelige tabel vil havde en sum på 0.

select t1.id, t1.navn, sum(t2.a) as 'a', sum(t2.b) as 'b', from tabel1 as t1
inner join tabel2 as t2 on t1.id = t2.id where t2.dato >= '2004-01-01' and
t2.dato <= '2004-12-31' group by t2.id
Dette giver kun de summerede poster fra tabel 2 og de tilhørende navne fra
tabel 1. Jeg har prøver 'inner join', 'left join' og 'right join', men det
giver ikke det rigtige resultat.

Hvordan joines disse to tabeller så man er sikker på at alt i tabel 1 er
med??

Mvh
Poul Erik



 
 
Michael Zedeler (23-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 23-11-05 01:52

P.E. Nikolajsen wrote:
> Jeg har to tabeller som skal joines:
>
> [klip]
>
> Hvordan joines disse to tabeller så man er sikker på at alt i tabel 1 er
> med??

Skriv et eksempel på indholdet i de to tabeller, havd du får af resultat
nu og hvad du gerne vil have som resultat. Det er nemmere at forholde
sig til.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

P.E. Nikolajsen (23-11-2005)
Kommentar
Fra : P.E. Nikolajsen


Dato : 23-11-05 08:42

OK
Tabel 1
id navn
1 aaaaaaaaaaaa
2 bbbbbbbbbbb
3 cccccccccccc
4 ddddddddddd
5 eeeeeeeeeeee

Tabel 2
id a b
1 10 15
1 11 15
1 12 15
2 14 10
2 20 20
5 11 11
5 20 15

Resultat
id navn sum(a) sum(b)
1 aaaaaaaaaaaa 33 45
2 bbbbbbbbbbb 34 30
3 cccccccccccc 0 0
4 ddddddddddd 0 0
5 eeeeeeeeeeee 31 26

Hvordan skal sql-sætningen se ud for at opnå dette?

"Michael Zedeler" <michael@zedeler.dk> wrote in message
news:H2Pgf.926$Cl2.16210@news000.worldonline.dk...
> P.E. Nikolajsen wrote:
> > Jeg har to tabeller som skal joines:
> >
> > [klip]
> >
> > Hvordan joines disse to tabeller så man er sikker på at alt i tabel 1 er
> > med??
>
> Skriv et eksempel på indholdet i de to tabeller, havd du får af resultat
> nu og hvad du gerne vil have som resultat. Det er nemmere at forholde
> sig til.
>
> Mvh. Michael.
> --
> Which is more dangerous? TV guided missiles or TV guided families?
> Visit my home page at http://michael.zedeler.dk/
> Get my vcard at http://michael.zedeler.dk/vcard.vcf



Michael Zedeler (23-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 23-11-05 09:10

P.E. Nikolajsen wrote:

> Tabel 1
> id navn
> 1 aaaaaaaaaaaa
> 2 bbbbbbbbbbb
> 3 cccccccccccc
> 4 ddddddddddd
> 5 eeeeeeeeeeee
>
> Tabel 2
> id a b
> 1 10 15
> 1 11 15
> 1 12 15
> 2 14 10
> 2 20 20
> 5 11 11
> 5 20 15
>
> Resultat
> id navn sum(a) sum(b)
> 1 aaaaaaaaaaaa 33 45
> 2 bbbbbbbbbbb 34 30
> 3 cccccccccccc 0 0
> 4 ddddddddddd 0 0
> 5 eeeeeeeeeeee 31 26
>
> Hvordan skal sql-sætningen se ud for at opnå dette?

SELECT navn, SUM(a), SUM(b)
FROM tabel1, tabel2
WHERE tabel1.id = tabel2.id
GROUP BY navn

Og så lavede du en fejl, da du svarede på mit indlæg. Læs denne her:

http://usenet.dk/netikette/citatteknik.html

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

P.E. Nikolajsen (23-11-2005)
Kommentar
Fra : P.E. Nikolajsen


Dato : 23-11-05 09:45

> > Resultat
> > id navn sum(a) sum(b)
> > 1 aaaaaaaaaaaa 33 45
> > 2 bbbbbbbbbbb 34 30
> > 3 cccccccccccc 0 0
> > 4 ddddddddddd 0 0
> > 5 eeeeeeeeeeee 31 26
>
> SELECT navn, SUM(a), SUM(b)
> FROM tabel1, tabel2
> WHERE tabel1.id = tabel2.id
> GROUP BY navn
>
Nix, den virker ikke. Den medtager kun de poster hvor sum a eller b ikke er
0. Ikke alle poster i tabel 1 (altså post 3 og 4 er udeladt i resultatet)

Mvh
PE



Michael Zedeler (23-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 23-11-05 09:55

P.E. Nikolajsen wrote:
>>>Resultat
>>>id navn sum(a) sum(b)
>>>1 aaaaaaaaaaaa 33 45
>>>2 bbbbbbbbbbb 34 30
>>>3 cccccccccccc 0 0
>>>4 ddddddddddd 0 0
>>>5 eeeeeeeeeeee 31 26
>>
>>SELECT navn, SUM(a), SUM(b)
>>FROM tabel1, tabel2
>>WHERE tabel1.id = tabel2.id
>>GROUP BY navn
>
> Nix, den virker ikke. Den medtager kun de poster hvor sum a eller b ikke er
> 0. Ikke alle poster i tabel 1 (altså post 3 og 4 er udeladt i resultatet)

Ups. Så har du brug for et venstre join:

SELECT navn, SUM(a), SUM(b)
FROM tabel1, tabel2
WHERE tabel1.id += tabel2.id
GROUP BY navn

(Det kan godt være at "+=" ovenfor skal skiftes ud med "=+".)

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

P.E. Nikolajsen (23-11-2005)
Kommentar
Fra : P.E. Nikolajsen


Dato : 23-11-05 10:23

> (Det kan godt være at "+=" ovenfor skal skiftes ud med "=+".)

+= giver en syntaks fejl. Det gør =+ ikke. Men resultatet er det samme.

Mvh
PE



Michael Zedeler (23-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 23-11-05 10:33

P.E. Nikolajsen wrote:
>>(Det kan godt være at "+=" ovenfor skal skiftes ud med "=+".)
>
>
> += giver en syntaks fejl. Det gør =+ ikke. Men resultatet er det samme.

Så skal du bytte rundt på tabel1 og tabel2. Hvis der stod tabel1 +=
tabel2, skal der stå tabel2 =+ tabel1.

Mvh. Michael.

--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Peter Farsinsen (23-11-2005)
Kommentar
Fra : Peter Farsinsen


Dato : 23-11-05 09:56

P.E. Nikolajsen wrote:

>>SELECT navn, SUM(a), SUM(b)
>>FROM tabel1, tabel2
>>WHERE tabel1.id = tabel2.id
>>GROUP BY navn

Jeg har desværre ikke haft tid til at teste det, men left outer join
burde afair medtage alle poster fra tabel1. Derfor:

SELECT navn, SUM(a), SUM(b)
FROM tabel1
LEFT OUTER JOIN tabel2 ON tabel1.id = tabel2.id

--
Peter
fornavn@efternavn.dk

Michael Zedeler (23-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 23-11-05 10:15

Peter Farsinsen wrote:
> P.E. Nikolajsen wrote:
>
>
>>>SELECT navn, SUM(a), SUM(b)
>>
>>>FROM tabel1, tabel2
>>
>>>WHERE tabel1.id = tabel2.id
>>>GROUP BY navn
>
>
> Jeg har desværre ikke haft tid til at teste det, men left outer join
> burde afair medtage alle poster fra tabel1. Derfor:
>
> SELECT navn, SUM(a), SUM(b)
> FROM tabel1
> LEFT OUTER JOIN tabel2 ON tabel1.id = tabel2.id
>
GROUP BY navn



Det er det samme som jeg skrev, blot med en anden syntaks. Man kan også
skrive

SELECT navn, SUM(a), SUM(b)
FROM tabel1 NATURAL LEFT JOIN tabel2
GROUP BY navn

Så benytter den lighed imellem attributter med samme navn i begge
tabeller. Det står alt sammen her:

http://dev.mysql.com/doc/refman/4.1/en/join.html

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

P.E. Nikolajsen (23-11-2005)
Kommentar
Fra : P.E. Nikolajsen


Dato : 23-11-05 10:36

Det skrev jeg på da jeg prøvede det.

PE



Michael Zedeler (23-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 23-11-05 10:37

P.E. Nikolajsen wrote:
> Det skrev jeg på da jeg prøvede det.

Hvad svarer du på?


--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

P.E. Nikolajsen (23-11-2005)
Kommentar
Fra : P.E. Nikolajsen


Dato : 23-11-05 11:31

GROUP BY navn

"Michael Zedeler" <michael@zedeler.dk> wrote in message
news:OKWgf.944$Cl2.16501@news000.worldonline.dk...
> P.E. Nikolajsen wrote:
> > Det skrev jeg på da jeg prøvede det.
>
> Hvad svarer du på?
>
>
> --
> Which is more dangerous? TV guided missiles or TV guided families?
> Visit my home page at http://michael.zedeler.dk/
> Get my vcard at http://michael.zedeler.dk/vcard.vcf



Peter Farsinsen (23-11-2005)
Kommentar
Fra : Peter Farsinsen


Dato : 23-11-05 20:05

Michael Zedeler wrote:

> Det er det samme som jeg skrev, blot med en anden syntaks. Man kan også
> skrive

Jep det ved jeg. Jeg så dog først dit indlæg efter at have postet mit
eget. Desuden foretrækker den mere eksplicitte syntax jeg foreslog ;)

--
Peter
fornavn@efternavn.dk

P.E. Nikolajsen (23-11-2005)
Kommentar
Fra : P.E. Nikolajsen


Dato : 23-11-05 10:27

> SELECT navn, SUM(a), SUM(b)
> FROM tabel1
> LEFT OUTER JOIN tabel2 ON tabel1.id = tabel2.id

Dette sætning giver intet resultat - kun en svømmende delfin og en kop kaffe
der bliver kold!
andre kombination af join giver kvikke svar - 26 rows på 0,0168s

Mvh
PE



michael@zedeler.dk (23-11-2005)
Kommentar
Fra : michael@zedeler.dk


Dato : 23-11-05 14:14

Jeg vil gerne hjælpe dig, men det er ekstremt besværligt overhovedet
at kommunikere med dig, da du ikke overholder reglerne for citatteknik.

Så jeg håber at du har løst problemet på egen hånd. Jeg ved i
hvert fald ikke hvad det er, du spørger om.

Mvh. Michael.


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

Månedens bedste
Årets bedste
Sidste års bedste