JOIN

Üdv!

Tudom már volt 1000 cikk, de bárhogy csinálom nem az az eredmény jön amit akarok, úgy hogy segítséget kérek.
(táblákból csak azt írom amit fel kell használni, többi úgyse releváns.

Tábla1:
id,datum

Tábla2:
id,termek_id,menny

Tábla3:
id,datum

Tábla4:
id,termek_id,menny

Feladat: adott időszakba adott termek_id kigyűjtése havonként.
elvileg full outer join kellene, de bárhogy csűröm csavarom mindig sql hiba.

pl.: select sum(tabla2.menny) as menny1, sum(tabla4.menny) as menny2
from tabla1,tabla2
join tabla3, tabla4
where tabla1.id=tabla2.id
and tabla3.id=tabla4.id
and tabla1.datum between '2010-01-01' and '2010-12-31'
and tabla3.datum between '2010-01-01' and '2010-12-31'
and tabla2.termek_id='1'
and tabla4.termek_id='1'
group by Month( tabla1.datum),Month(tabla3.datum)

nah így nem megy...

pch

Hozzászólások

Hello!

Nem vagyok egy nagy sql expert ,de tanulmányaim szerint a táblák join-olásakor a mezőket ON-al szokták összekötni és nem where-el.

select sum(tabla2.menny) as menny1, sum(tabla4.menny) as menny2
from tabla1,tabla2
join tabla3, tabla4
on tabla1.id=tabla2.id
and tabla3.id=tabla4.id
and tabla1.datum between '2010-01-01' and '2010-12-31'
and tabla3.datum between '2010-01-01' and '2010-12-31'
and tabla2.termek_id='1'
and tabla4.termek_id='1'
group by Month( tabla1.datum),Month(tabla3.datum)

Üdv.

"syntax error..." ugye?

Az első két táblára ez működhet:


select t_id, sum(menny), extract(month from tabla1.datum) as honap
from tabla2 join tabla1 using(id)
where tabla1.datum between '11-01-01' and '11-01-31'
and t_id=1
group by extract(month from tabla1.datum), t_id;

Ennek alapján a másik táblára is meg tudod írni, aztán pl. a két lekérdezést UNION-nal egyesítheted.

gy

Alakul, bár az union után nemtudom eldönteni mely adat honnan jött.
Lekérdezés:
SELECT sum( menny ) AS kimenny, Year( kimszallito.kelte ) AS kiyear, Month( kimszallito.kelte ) AS kimonth
FROM kimszallitocikklista, kimszallito
WHERE kimszallitocikklista.cikk_id = '1'
AND kimszallitocikklista.szallito_id = kimszallito.szallito_id
AND kimszallito.kelte between '2010-01-01' and '2011-01-31'
GROUP BY Month( kimszallito.kelte )

union

SELECT sum( menny ) AS bemenny, Year( beszallito.kelte ) AS beyear, Month( beszallito.kelte ) AS bemonth
FROM beszallitocikklista, beszallito
WHERE beszallitocikklista.cikk_id = '1'
AND beszallitocikklista.szallito_id = beszallito.szallito_id
AND beszallito.kelte between '2010-01-01' and '2011-01-31'
GROUP BY Month( beszallito.kelte )

kimenet:

kimenny kiyear kimonth
11 2010 3
3 2010 11
3 2010 12
100 2010 3
35 2010 12

míg önmagába az union előtti és utáni sorok is jók önmagukba.

pch
--
http://www.buster.hu
--

Fuggetlenul mindentol, az ON zaradek hasznalata ajanlott, ertsd: ne a WHERE utan parositsd a tablakat.

select sum(tabla2.menny) as menny1
from tabla1 right join tabla2 on tabla1.id = tabla2.id
order by datum

mit mutat?

(írhatnál pár konkrét példa adatot, hogy lehessen vele szórakázni :D)
________________________________________________
http://kronosz.sinuslink.hu

Valami ilyesmire gondoltál?

select sum(t2.menny) as menny1, sum(t4.menny) as menny2
FROM t1
INNER JOIN t2 on t1.id = t2.id
INNER JOIN t3 on t3.id = t2.id
LEFT OUTER JOIN t4 on t4.id = t3.id
WHERE t1.datum BETWEEN '2011-02-01' AND '2011-03-09'
group by Month( t1.datum)

stb...