|
| [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 (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.
| |
|
|