[ zrnvltc @ 14.06.2009. 09:49 ] @
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
[ Goran Rakić @ 14.06.2009. 09:58 ] @
Treba ti spoljno spajanje (spajanje sa nedosajućim vrednostima), ne unutrašnje. Pogledaj http://en.wikipedia.org/wiki/Join_(SQL)#Outer_joins
[ zrnvltc @ 14.06.2009. 18:16 ] @
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
[ jablan @ 14.06.2009. 18:40 ] @
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
[ zrnvltc @ 14.06.2009. 20:21 ] @
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
[ jablan @ 14.06.2009. 20:32 ] @
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...
[ zrnvltc @ 14.06.2009. 20:35 ] @
yep to je to
puno hvala
[ jablan @ 14.06.2009. 20:46 ] @
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