Prikaži potpunu verziju : SQL select many to many
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...
JOIN (http://www.w3schools.com/sql/sql_join.asp).
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
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.
vBulletin® v3.8.7, Copyright ©2000-2024, vBulletin Solutions, Inc.