PDA

Pogčedajte punu verziju : Po jedan red iz vezne tabele (umesto vise...blah)


andrej
12. 02. 2007., 19:52
Al sam srocio... nego, sta me muci:

Imam neki model podataka, gde postoji tabela Izvestaj, TipDogadjaja i IzvestajTipDogadjaja (za vise prema vise). Tip dogadjaja je sifarnik.

Ako jedan izvestaj ima vise dogadjaja, normalno, imam vise upisa u veznu tabelu, tipa:
izvestajID|tipdogadjajaID
1 |2
1 |4
1 |8
------------------------
Ono sto pokusavam jeste da prilikom pretrage po tipu dogadjaja, za vrednosti recimo 2 i 8 (na primer, to su Havarija i Poplava), ne dobijem dva reda za isti izvestaj, vec jedan, da bih ga tako i prikazao direktno.

Ja sam dosao do zakljucka da to ne mogu dobiti iz cistog sql-a (iako se nikako ne mogu pohvaliti znanjemistog), pa bih voleo da me demantujete.

Ako ne, na koji nacin to najefikasnije resavate kroz serverski kod?

caiser
12. 02. 2007., 20:35
Ako sam te dobro razumeo, mozes recimo da koristis distinct funkciju.

SELECT DISTINCT(izvestajID) FROM tabela WHERE tipdogadjajaID IN (2, 8);

zextra
12. 02. 2007., 20:53
Ili tako, ili da grupises po nekom polju koje se ne menja (izvestajID npr)

SELECT ... FROM ... WHERE tipdogadjajaID IN (2, 8) GROUP BY izvestajID

ali bih i ja koristio caiserovo resenje.

andrej
12. 02. 2007., 21:29
Ok, probacu sutra to.
Mada sam malo skeptican, jer trebam da povucem inner join-om jos neke podatke iz drugih tabela.

| IzvestajID | Grad | Datum | Radnik(ko je pisao)|

andrej
14. 02. 2007., 21:32
Super, ovo sa DISTINCT mi radi.

Evo kako sam sklepao ceo query:


SELECT DISTINCT (Izvestaj.IzvestajID) AS Izvestaj,
REGION.NazivRegiona, Izvestaj.Datum, Izvestaj.IzvestajID, Sum(TipDogadjajaPoIzvestaju.Kolicina) AS BrojDogadjaja
FROM TipDogadjaja INNER JOIN
(REGION INNER JOIN (Izvestaj INNER JOIN TipDogadjajaPoIzvestaju
ON Izvestaj.IzvestajID = TipDogadjajaPoIzvestaju.IzvestajID)
ON REGION.RegionId = Izvestaj.RegionID)
ON TipDogadjaja.TipDogadjajaID = TipDogadjajaPoIzvestaju.TipDogadjajaID
WHERE ((TipDogadjajaPoIzvestaju.TipDogadjajaID) In (2,8))
GROUP BY REGION.NazivRegiona, Izvestaj.Datum, Izvestaj.IzvestajID;


TipDogadjajaPoIzvestaju je ustvari ona vezna tabela, koja pored dva foreign key-a ima i svoja dva polja.

Jos jedna stvar me interesuje. Naleteo sam na ovaj text (http://weblogs.sqlteam.com/jeffs/archive/2005/12/14/8546.aspx) gde tip objasnjava neku "tehniku" sa GROUP BY naredbom, i izgleda mi ok, samo ne kapiram bas kako bi kod mene to uglavio, a sve mi se cini da bi moglo :D?

Hvala puno.