Lardux
19.05.2005, 16:37:06
witam,
mam takie tabele
produkty (
p_id - primary key,
p_nazwa
p_cena
)
magazyn
(
m_id - primary key
m_ulica
m_kod
m_miasto
)
stan
(
stan_id - primary key
stan_m_id - foregin key powiazany z magazyn
stan_p_id - foregin key powiazany z produkty
stan_ilosc
)
chce wyswietlic wszystkie produkty ktore znajduja sie w magazynie o m_id=1 ale zwykly inner join mi nie starczy, bo ja chce miec WSZYSTKIE produkty a wartosci stanu magazynu z tabeli stan, a tam gdzie nie ma produktow na stanie, to chcialbym widziec 0, innymi slowy interesuje mnie cos takiego
m_id-----p_id-----stan_ilosc
--------------------------------------
1------------1------------10
1------------2------------0
1------------3------------7
1------------4------------0
normany inner join da mi
m_id-----p_id-----stan_ilosc
--------------------------------------
1------------1------------10
1------------3------------7
jesli zrobie left join'a to da mi wszystkie produkty, ale gdy dodam where m_id = 1 to znowu mam to samo co z inner joina..
any idea?
Draugfor
19.05.2005, 17:13:16
Moze tak?
SELECT m_id, p_id, stan_ilosc
FROM produkty, magazyn, stan
WHERE stan.stan_m_id=magazyn.m_id AND stan.stan_p_id=produkty.p_id AND magazyn.m_id=1;
Pozdrawiam.
amwoan
19.05.2005, 19:07:53
Jeśli dobrze zrozumiałem, to to powinno dać pożądany rezultat:
SELECT magazyn.m_id, produkty.p_id, IF(stan.stan_ilosc, stan.stan_ilosc, 0) AS stan_ilosc
FROM produkty INNER JOIN stan ON stan.stan_p_id=produkty.p_id RIGHT JOIN magazyn ON stan.stan_m_id=magazyn.m_id WHERE magazyn.m_id=1
Można oczywiście przestawić tabele i dać LEFT JOIN zamiast RIGHT, ale już mi się nie chciało.
Lardux
2.06.2005, 12:02:25
pierwsza odpowiedz to zwykly inner join - nie dziala
druga odpowiedz daje same zera - nie dziala...
potrzebuje wszystkie produkty i ich stan, jesli jest, jesli nie ma to null, przyklad, mamy 3 produkty, jeden magazyn, na stanie jest jeden produkt, sql daje nam w wyniku 3 rekordy, z ktorych jeden posiada wartosc stan = np 17 (bo tyle akurat jest go na magazynie) a reszta rekordow posiada pole stan = NULL, jesli nie damy warunku where magazyn id = jakis numerek to wszystko dziala za pomoca zwyklego left joina, lecz gdy dochodzi warunek magazyny, nawet jak dam magazyn id = 1 or magazyn id is null - to nie dziala...
moze ktos ma jeszcze jakis pomysl??
edit, problem rozwiazany...
SELECT * FROM produkty Left JOIN stan ON stan.stan_p_id=produkty.p_id and stan.stan_m_id=17 or stan.stan_m_id is null