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/


Raspunde prin e-mail lui