Alex 'CAVE' Cernat wrote: > > bun, se dau 2 tabele, sa zicem student si note ( ca tot incepe sesiunea > pentru unii - bleah ) > > student : idstud bigint prim_key, nume vc(...) > note: idnot bigint pk, idstud bigint, nota tinyint, obs vc(...) > binenteles not null peste tot, dar nu asta e esential > > legatura este student 1 <-> 0..n note ( adica pentru un stud. exista > zero sau mai multe intrari in note ) > > nota va fi sa zicem 0 daca nu a calcat pe acolo sau nota pe bune, in caz > ca a fost pe la examene > > sa zicem ca m-ar interesa sa aflu lista studentilor si eventual cate > examene au dat; query-ul pe care l-am folosit s-ar traduce in cazul > exemplului prin: > > select s.idstud,s.nume,count(n.nota) from student s left join note n on > ( s.idstud = n.idstud and n.nota > 0 ) group by s.idstud
Da merge ! Oracle, Postgresql, SQLServer ... DB2 ... Numai ca adaugi la group by si s.nume select s.idstud,s.nume,count(n.nota) from student s left join note n on ( s.idstud = n.idstud and n.nota > 0 ) group by s.idstud, s.nume Merge si fraza: (Nu o garantez pe MySQL) select s.idstud, s.nume (select count(*) from note n where s.idstud = n.idstud and n.nota > 0) As Examene from student s > > query-ul asta a mers perfect in mysql, atat ca 'non error' cat si ca > rezultate > intrebarea este: alte sgdb-uri suporta asa ceva ? ca in mod normal afaik > in regulile de join nu poti pune decat legaturi intre cele doua tabele, si ( s.idstud = n.idstud and n.nota > 0 ) tot legatura e. > nu si alte kestii care in mod normal ar trebui sa fie pe la where ( desi pai in mod normal poti trai doar cu where, fara LEFT|RIGHT OUTER JOIN (desi in Oracle le ai cu s.idstud = n.idstud(+) ) > din cate am inteles azi din documentatia mysql, clauzele de join sunt > 'mutate' cumva intern si tratate in principiu ca un where ) Intern tot acolo se ajunge. > > problema e ca nu cred ca s-ar putea pune n.nota > 0 intr-un where, > pentru ca nu ar fi iesit pentru ca dupa cat ma duce pe mine capul, daca > am un student cu o nota de 0 nu ar aparea in result, din cauza de where > In acel caz " n.nota is null " si " n.nota > 0 " devine fals si din acest motiv dispar cei fara note sau cu note doar de 0. Poti folosi: where ((n.nota is null) or (n.nota > 0)) Pt. daca-i null oricum nu-l numara count(n.nota) si ramane curat Left outer join ( s.idstud = n.idstud ) Intrebare! Ce zici de fraza de mai jos ? Eu zic ca merge ! poate o incerci tu! select s.idstud,s.nume,count(n.nota > 0) from student s left join note n on ( s.idstud = n.idstud ) group by s.idstud > sorry ... a fost cam lung > > Alex > > ps: kestiile alelalte doua mi-au venit in gand cand frunzaream doace de > mysql, dar intre timp se pare ca le-am uitat :-( ... daca mi le > reamintesc, shoot > --- > Pentru dezabonare, trimiteti mail la > [EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'. > REGULI, arhive si alte informatii: http://www.lug.ro/mlist/ -- Petrica --- Pentru dezabonare, trimiteti mail la [EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'. REGULI, arhive si alte informatii: http://www.lug.ro/mlist/
