Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa inner join upitom

[es] :: MySQL :: Problem sa inner join upitom

[ Pregleda: 2163 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zrnvltc
zoran vuletic
stomatolog

Član broj: 221088
Poruke: 28
77.46.191.*



Profil

icon Problem sa inner join upitom14.06.2009. u 09:49 - pre 180 meseci
Hi,
Imam dve tabele koje sadrze popisne
artikle iz raznih perioda.
Kada probam da napravim upit
Code:

SELECT zalihe_a.sifra,zalihe_a.Kolicina as kol1,zalihe_b.Kolicina as kol2 FROM zalihe_a
inner join zalihe_b on zalihe_a.sifra=zalihe_b.sifra
GROUP BY zalihe_a.sifra

ne dobijem sve rezultate.
primer:
Code:

+------+------+
| sifra  | kolicina    // >>> zalihe_a
+------+------+
| 15   | 1038 |  
| 3    |  2169 |  
| 100  |  257  | 
| 20   |  600  |  
+------+------+

+------+------+
| sifra  | kolicina     // >>> zalihe_b
+------+------+
| 18     | 200   |  
| 3      | 4025  |  
| 92     | 1578 | 
| 20     | 1025 |  
+------+------+

Ono sto ja dobijam je:
Code:

+------+------+-------+
| sifra | kol1 | kol2                // >>> rezultat
+------+------+-------+
| 3   | 2169 | 4025 |
| 20  | 600  | 1025 |
+------+------+-------+

a u stvari treba mi:
Code:

+------+------+-------+
| sifra| kol1  | kol2                // >>> rezultat
+------+------+-------+
| 18     | 200  |  0  |
| 20     | 600  |1025 |
| 92     | 2169 | 0   |
| 20     | 600  |1025 |
...............................
...............................
+------+------+-------+

Jednostavno ne spaja ako nisu obe sifre
zavedene u obe tabele.
A meni trebaju sve sifre i ako ne postoji u drugoj tabeli
dodeliti vrednost '0' nula.
Hvala unapred
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Problem sa inner join upitom14.06.2009. u 09:58 - pre 180 meseci
Treba ti spoljno spajanje (spajanje sa nedosajućim vrednostima), ne unutrašnje. Pogledaj http://en.wikipedia.org/wiki/Join_(SQL)#Outer_joins
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

zrnvltc
zoran vuletic
stomatolog

Član broj: 221088
Poruke: 28
77.46.191.*



Profil

icon Re: Problem sa inner join upitom14.06.2009. u 18:16 - pre 180 meseci
dobio sam relativno slicno sa:
Code:

SELECT * FROM artikli
LEFT OUTER JOIN zalihe_a on artikli.sifra=zalihe_a.sifra
LEFT OUTER JOIN zalihe_b on artikli.sifra=zalihe_b.sifra

jedino sto,
mi izlistava SVE sifre iako nema kolicine u zalihama a i b.
Interesuje me da li postoji nesto konkretnije za moj slucaj
ili moram da pravim view od ovog upita
pa da sortiram po kolicinama etc... da bih
dobio vrednosti sifara sa kolicinama iz obe
tabele zaliha koje samo postoje?

Jednostavno ukoliko nema sifre u zalihama a ili b
da ne izlistava, a ukoliko ima u 'a' a ne u 'b'
da rezlutat izgleda ovako
Code:

sifra     |  kol_a    |   kol_b

12       |    NULL   |      15                  // znaci ima u zalihama_b,
3        |    20     |    NULL                // znaci ima u zalihama_a, samo
15       |    17     |      19                // znaci ima u zalihama_b i zalihama_a  
etc...........................

33      |   NULL    |    NULL             // ovako nesto bih izbegao, tu je i poenta mog pitanja

Ako je problem, ja cu iskoristiti prvo resenje
malo improvizovati i to je to
Hvala
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Problem sa inner join upitom14.06.2009. u 18:40 - pre 180 meseci
Code:
SELECT sifra, sum(zalihe_a.kolicina), sum(zalihe_b.kolicina) FROM artikli
LEFT OUTER JOIN zalihe_a on artikli.sifra=zalihe_a.sifra
LEFT OUTER JOIN zalihe_b on artikli.sifra=zalihe_b.sifra
where sum(zalihe_a.kolicina) > 0 or sum(zalihe_b.kolicina) > 0
group by sifra
 
Odgovor na temu

zrnvltc
zoran vuletic
stomatolog

Član broj: 221088
Poruke: 28
77.46.191.*



Profil

icon Re: Problem sa inner join upitom14.06.2009. u 20:21 - pre 180 meseci
Prijavljuje mi "Invalid use of group function"
cak i kad maknem group by !

ali ok
Code:

where sum(zalihe_a.kolicina) > 0 or sum(zalihe_b.kolicina) > 0

mislim da ce resiti,
bar cu probati neku varijaciju
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Problem sa inner join upitom14.06.2009. u 20:32 - pre 180 meseci
Sorry, probaj:

Code:
SELECT artikli.sifra, sum(zalihe_a.kolicina), sum(zalihe_b.kolicina) FROM artikli
LEFT OUTER JOIN zalihe_a on artikli.sifra=zalihe_a.sifra
LEFT OUTER JOIN zalihe_b on artikli.sifra=zalihe_b.sifra
group by artikli.sifra
having sum(zalihe_a.kolicina) > 0 or sum(zalihe_b.kolicina) > 0


Trebalo je da ostaviš skripte koje kreiraju test tabele da bismo mogli da probavamo upite koje kačimo...
 
Odgovor na temu

zrnvltc
zoran vuletic
stomatolog

Član broj: 221088
Poruke: 28
77.46.191.*



Profil

icon Re: Problem sa inner join upitom14.06.2009. u 20:35 - pre 180 meseci
yep to je to
puno hvala
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Problem sa inner join upitom14.06.2009. u 20:46 - pre 180 meseci
E pa nije...

Upit ne radi kako treba ako u nekoj tabeli količina imaš više od jednog reda za istu šifru.

Ovo je bolje (nije probano na MySQL):
Code:
select sifra, sum(kolicina_a), sum(kolicina_b)
from
(
select sifra, kolicina as kolicina_a, 0 as kolicina_b
from zalihe_a
union all
select sifra, 0, kolicina
from zalihe_b
) a
group by sifra

 
Odgovor na temu

[es] :: MySQL :: Problem sa inner join upitom

[ Pregleda: 2163 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.