• 8 odgovora
  • 3.397 pregleda
Prost upit koji ne znam da resim 25.06.2007. u 09:54 · pre 235 meseci #1
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
Re: Prost upit koji ne znam da resim 25.06.2007. u 10:16 · pre 235 meseci #3
Citat:
broker: Po svemu sudeci, nedostaje ti treca tabela, kojom povezujes radnike i projekte.

Odnosno, many-to-many odnos umesto one-to-many.
Re: Prost upit koji ne znam da resim 25.06.2007. u 10:16 · pre 235 meseci #4
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
Re: Prost upit koji ne znam da resim 25.06.2007. u 11:08 · pre 235 meseci #5
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'

Re: Prost upit koji ne znam da resim 25.06.2007. u 11:25 · pre 235 meseci #6
>
" 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
                                )
Re: Prost upit koji ne znam da resim 25.06.2007. u 11:54 · pre 235 meseci #7
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.
Re: Prost upit koji ne znam da resim 25.06.2007. u 11:56 · pre 235 meseci #8
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.
Potpis
Someone's sitting in the shade today because someone planted a tree a long time ago.
Re: Prost upit koji ne znam da resim 01.07.2007. u 11:46 · pre 235 meseci #9
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]
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme