PDA

Prikaži potpunu verziju : SQL select many to many


krahi
25.8.2012, 14:28
dakle,imam tri tabele

clanovi
id_clan ime prezime

knjige
id_knjiga ime opis

iznajmljene
id_clan,id_knjiga

Trebalo bi da se napravi kveri koji ce izbaciti sledeci rezultat,u jednom redu:
ime knjige,opis,i ime i prezime svih koji su iznajmljivali knjigu.

id_knjiga,opis,ime1,prezime1,ime2,prezime2....

ubih se guglujuci i nikako da nadjem...

JohnnyNT
25.8.2012, 14:31
JOIN (http://www.w3schools.com/sql/sql_join.asp).

krahi
25.8.2012, 14:57
SELECT knjige.ime,knjige.opis,t1.ime,t1.prezime ,t2.ime,t2.prezime
FROM iznajmljene
INNER JOIN knjige
ON knjige.id = iznajmljene.knjige_id
INNER JOIN clanovi as t1
ON t1.id = iznajmljene.radnik_id
INNER JOIN radnici as t2
ON t2.id = iznajmljene.radnik_iddakle t1 i t2 kolona je ista.Kako da t2 kolona izbacuje drugo ime koje je iznajmljivalo knjigu i kako napisati da rezultat bude u jednom redu(za svaku knjigu ime + opis + svi koji su je uzimali bez obzira koliko ih je)

1. Ilijada,ep,marko markovic,janko jankovic
2. Odiseja,ep,Marko Markovic,MIlos MIlosevic,Laza Lazic,Petar Petrovic...itd

irreal
25.8.2012, 19:54
Ovakva funkcionalnost ne postoji u osnovnoj SQL sintaksi.

razlicite baze naravno implementiraju razlicit set SQL naredbi, tako u MS Access bazi imas PIVOT keyword, kao i neke alternative u SQL serveru.
Egzoticna resenja poput ovog: http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-sql-server


Medjutim, ja ti najiskrenije savetujem da to sto ti zelis da postignes odradis u kodu aplikacije.

dakle, JOIN-om bi dobio vise redova po knjizi (za svakoga ko ju je iznajmio po jedan red) i onda u kodu te podatke konsolidujes u jedan red.

eventualno to odradis u stored proceduri u samoj bazi ako si vec takav pristup zamislio. u stored proceduri bi napravio kursor koji bi prosao kroz sve redove rezultata i napravio format koji ti odgovara.