[ Arbitar2 @ 25.06.2007. 09:54 ] @
Pozdrav ,

Imam problem oko upita mada nisam vican posebno sql-u.Naime, imam dve tabele recimo Radnik i projekat koje su povezane relacijom OneToMany.
Interesuje me kako bi izgledao upit na osnovu :" Izberi mi sve radnike koje se nalaze i u projektu1 i u projektu2 ".Koristim Hibernate Query language.

Srdacno,
Mb
[ broker @ 25.06.2007. 10:02 ] @
Po svemu sudeci, nedostaje ti treca tabela, kojom povezujes radnike i projekte.
[ jablan @ 25.06.2007. 10:16 ] @
Citat:
broker: Po svemu sudeci, nedostaje ti treca tabela, kojom povezujes radnike i projekte.

Odnosno, many-to-many odnos umesto one-to-many.
[ Arbitar2 @ 25.06.2007. 10:16 ] @
Posto radim sa O/R , nije mi potrebna vezna tabela jer je sam Hibernate odradi u bazi.( Ja sam samo uprostio pitanje,inace povezano je sa 4 tabele)Ali ajde recimo da imam i trecu tabelu kako bi izgledao upit?
Ja sam pokusao sa
Code:

Select * from Radnik r join Project p where p in(Select * from Project pp where pp.name='Projekat1' or pp.name='Projekat2')


Pozdrav
[ jablan @ 25.06.2007. 11:08 ] @
Može na više načina. Npr:
Code:

select *
from radnik r
inner join radnikprojekat rp1 on r.id = rp1.radnikid
inner join projekat p1 on p1.id = rp1.projekatid
inner join radnikprojekat rp2 on r.id = rp2.radnikid
inner join projekat p2 on p2.id = rp2.projekatid
where
p1.imeprojekta = 'projekat1'
and p2.imeprojekta = 'projekat2'

[ ffb @ 25.06.2007. 11:25 ] @
>
" Izberi mi sve radnike koje se nalaze i u projektu1 i u projektu2 "

Code:

Select * from Radnik r where r.id in
                                (Select radnik_id, count(*) as broj   
from Project pp
                                                       where 
pp.name='Projekat1' or pp.name='Projekat2'
                                                       group by radnik_id 
                                                             having broj=2
                                )
[ Arbitar2 @ 25.06.2007. 11:54 ] @
Code:


Select * from Radnik r where r.id in
                                (Select radnik_id, count(*) as broj   
from Project pp
                                                       where 
pp.name='Projekat1' or pp.name='Projekat2'
                                                       group by radnik_id 
                                                             having broj=2
                                )


Ovako mi izbacuje radnike koji su u projektu1 ili u projektu2,mada sam siguran da bi ovo trebalo da radi.
[ Miloš Baić @ 25.06.2007. 11:56 ] @
Jedna tabela, RADNIK:
Code:

create table radnik (
 id_radnik integer not null,
 ime varchar(20),
 prezime varchar (20)

 constraint pk_radnik primary key (id_radnik)
);

Druga tabela, PROJEKAT:
Code:

create table projekat (
 id_projekat integer not null,
 naziv varchar(50),
 
 constraint pk_projekat primary key (id_projekat)
);

Treća, kreira vezu, POSAO, npr. jedan radnik na jednom projektu:
Code:

create table posao (
 id_radnik integer not null,
 id_projekat integer not null,
 
 constraint pk_posao primary key (id_radnik, id_projekat),

 constraint fk_posao_radnik foreign key (id_radnik)
  references radnik (id_radnik) on delete cascade on update cascade,

 constraint fk_posao_projekat foreign key (id_projekat)
  references projekat (id_projekat) on delete cascade on update cascade
);

Upit kojim možeš dobiti rezultat je:
Code:

select r.ime, r.prezime, p.naziv
from ((posao pos
 left join radnik r on pos.id_radnik = r.id_radnik)
 left join projekat p on pos.id_projekat = p.id_projekat)
where pos.id_projekat = neka_vrednost
or pos.id_projekat = neka_vrednost_1

BTW, iz glave, ali suština je to. Tabele su trivijalne. Imaš i na samom forumu primera za to.
[ Ana Komazec @ 01.07.2007. 11:46 ] @
Mozda moze ovako :

Code:
 
Select * 
From Radnik
Where id in (Select id From Project Where ime= "Project1" or ime="Project2" Group by id Having Count(id)=2)   




Pozdrav

[Ovu poruku je menjao Ana Komazec dana 01.07.2007. u 13:01 GMT+1]

[Ovu poruku je menjao Ana Komazec dana 01.07.2007. u 13:03 GMT+1]