Topic: kartais select su Join keistai veikia

SELECT - ( IF( ISNULL( SUM( Z.alga ) ) , 0, SUM( Z.alga ) ) + IF( ISNULL( SUM( T.alga ) ) , 0, SUM( T.alga ) ) + IF( ISNULL( SUM( S.alga ) ) , 0, SUM( S.alga ) ) + personalo_sektorius *100 + populiarumo_sektorius *100 + ivaizdzio_sektorius *100 ) AS a
FROM vartotojai AS V
LEFT JOIN treneriai AS T ON T.komandos_id = V.id
LEFT JOIN skautai AS S ON S.komandos_id = V.id
LEFT JOIN zaidejai AS Z ON Z.komandos_id = V.id
LEFT JOIN komandiniai_igudziai AS KI ON KI.komandos_id = V.id
WHERE V.id =1

Turiu auksciau pateikta uzklausa, Kazkodel kartais ji duoda visiskas nesamones...
Ta prasme paemus duomenis is atskiru lenteliu ir siuos- susumuotus gaunu skirtingus rezultatus
kodel ? :/

Re: kartais select su Join keistai veikia

a) nelogiškas konstrukcijas tokias, kaip "IF( ISNULL( SUM( Z.alga ) ) , 0, SUM( Z.alga ) )" gali keisti į "IFNULL(SUM(Z.alga), 0)";
b) eilutes, tokias kaip "LEFT JOIN treneriai AS T ON T.komandos_id = V.id" reikia keisti į "LEFT JOIN treneriai AS T ON V.id = T.komandos_id";
c) pabandyk žiūrėti kokie duomenys yra išgaunami iš duombazės tais atvejais, kai grąžinami skirtingi rezultatai: SELECT * FROM vartotojai AS V LEFT..";

Re: kartais select su Join keistai veikia

"LEFT JOIN treneriai AS T ON T.komandos_id = V.id" reikia keisti į "LEFT JOIN treneriai AS T ON V.id = T.komandos_id";
Hm o yra kazkoks skirtumas tvarkoje ?

Aciu uz patarimus pabandysiu paziurineti ;)

Re: kartais select su Join keistai veikia

rufas wrote:

Hm o yra kazkoks skirtumas tvarkoje ?

Yra skirtumas, nes jeigu išlaikai tą patį eiliškumą tai aiškiau suprasti tiek pačiam skaitant tiek kitiem ;)

Re: kartais select su Join keistai veikia

Hm,  tai cia kaip ir standartas svaraus kodo skaitosi kad pirma nurodyt ta lentele prie kurios jungi o tik po to ta, jungiamaja ? :) Oki turesiu omeny ;)

Hm man kazkodel tarkim is lenteles zaidejai  ima visu zaideju po du kartus..... kurie tenkina saligas po du kartus..

Re: kartais select su Join keistai veikia

HM Gal as blogai naudoju LEFT JOIN ?
Ar yra koks nors skirtumas kai jie eina keli vienas po kito ?

Palikus tik viena JOIN
pvz:

SELECT  IFNULL(SUM(Z.alga), 0)   
FROM vartotojai as V
LEFT JOIN zaidejai as Z
      ON V.id = Z.komandos_id
WHERE V.id = 1

veikia gerai ...

Re: kartais select su Join keistai veikia

Na ar gerai naudoji ar blogai aš jau nematydamas duomenų struktūros ir užduoties tai negaliu pasakyti. LEFT JOIN'as naudojamas tada kai norima iš kairės lentelės gauti visus įrašus prijungiant atitinkamus įrašus iš dešinės lentelės. Jeigu dešinėje lentelėje nerandamas atitinkamas įrašas tai tos lentelės stulpeliuose paliekami NULL'ai.

Re: kartais select su Join keistai veikia

o jei turim taip:

FROM vartotojai
LEFT JOIN A ON...
LEFT JOIN B ON..
LEFT JOIN C ON...


tai tarkim B kaire bus A?
As galvojau kad visais atvejais jungs prie vartotoju.. gal delto ir susibugina man viskas...

Re: kartais select su Join keistai veikia

Na šiuo atveju viskas viskas jungiama prie lentelės vartotojai, iš pradžių A, paskui B, paskui C. Garantuoju kad niekas nesibugita, tiesiog turi arba "kreivus" duomenis arba dar kažkas..