[ mika @ 01.09.2005. 13:51 ] @
Zdravo svima, imam jedan problem sa sintaksom MS Access-ovog SQL-a.

Naime imam tri tabele; potrebno mi je da između tabele 1 i tabele 2 napravim Inner join, kao npr:

Code:

SELECT tbl1.Field1, tbl2.field2
FROM tbl1 INNER JOIN tbl2
ON (tbl1.ID1 = tbl2.ID2) 


... a da izmedju prve i treće napravim Left join, kao na primer:

Code:

SELECT tbl1.Fld1, tbl3.Fld3
FROM tbl1 left JOIN tbl3 ON tbl3.ID3 = tbl1.ID1


E sad, sve mi ovo treba u jednom query-ju! Ne znam kako to da izvedem. Probao sam sa:

Code:

SELECT tbl2.Field2, tbl1.Field1, tbl3.Field3
FROM tbl1 
INNER JOIN tbl2 ON tbl1.ID1 = tbl2.ID2
RIGHT JOIN tbl3 ON tbl3.ID3 = tbl1.ID1


... ali mi javlja "Syntax error (missing operator) in query expression...".

U helpu piše ovako:

Code:

SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN table3
ON table2.field2 compopr table3.field3) 
ON table1.field1 compopr table2.field2;


Ali po ovome, javlja "Syntax error in FROM clausule", ili "Syntax error in Join clausule", zavisno od toga gde stavim zagrade

Šta da radim? Kako se uopšte prave ugnježdeni queriji u Accessu?

Hvala unapred.
[ mkaras @ 01.09.2005. 13:53 ] @
On Thu, 1 Sep 2005 14:51:08 CEST, "mika" wrote:


Citat:

Naime imam tri tabele; potrebno mi je da između tabele 1 i tabele 2 napravim Inner join, kao npr:



Pokusaj da napravis po jedan upit za svaki od poslova koji te

interesuju pa onda opet napravi upit koji ce uzimati podatke iz tek

napravljenih upita i dobices to sto zelis.


Niko ne tvrdi da se jednim upitom mora obaviti ceo posao. Ovako je cak

i preglednije i lakse za otklanjanje gresaka.


Access upite tretira isto kao i tabele tako da je to moguce uraditi.
[ goranvuc @ 01.09.2005. 14:00 ] @
Ako sam dobro shvatio tebi treba ovo:
Code:

SELECT tbl2.Field2, tbl1.Field1, tbl3.Field3 
FROM (tbl1 
INNER JOIN tbl2 ON tbl1.ID1 = tbl2.ID2)
LEFT JOIN tbl3 ON tbl1.ID1 = tbl3.ID3
[ motto cooltywator @ 01.09.2005. 14:03 ] @
Ugnjezden upit ti je rezultat iz jedne tabele. ako hoces da ti se prikaze vise rezultata iz jedne tabele. NPR

select radnik.ime, radnik.posao, r.plata
from radnik
where radnik.posao = (select radnik.posao
from radnik
where radnik.ime = "Marko");

(ovaj upit prikazuje ime,[posao i platu radnika koji imaju isti posao kao Marko
to je ugnjezdeni upit)
ali ja tebe nisam bas razumeo objasni malo vise



[Ovu poruku je menjao motto cooltywator dana 01.09.2005. u 15:04 GMT+1]
[ mika @ 01.09.2005. 14:15 ] @
@Motokultivator: pa nije baš ugnježdeni upit, pre bih rekao ugnjezdeni JOIN. Anyway, mislim da sam precizno opisao moj problemcic.

@Goranvuc: Probao sam ovo što si mi napisao, i javlja mi "join expressions not supported"

@Mkaras: To jeste ad-hoc rešenje, međutim pokazalo se dosta sporo zato što jedna od tabela ima preko 20.000 recorda. Damn...

@All: hvala svima na brzim odgovorima i na interesovanju, ali rešenje se i dalje traži...
[ goranvuc @ 01.09.2005. 14:18 ] @
Da li si siguran da u tabelama tbl1, tbl2, tbl3 imas polja pod tim nazivima (ID1, ID2, ID3)? Ono sto sam ti napisao bi trebalo da radi ako polja postoje u tabelama.
[ mika @ 01.09.2005. 14:21 ] @
Jesam, i tako odvojeni upiti rade kako treba, nego samo ne mogu da ih nateram da rade zajedno
[ goranvuc @ 01.09.2005. 14:30 ] @
Ajde nam lepo napisi koja je verzija Access-a u pitanju (to je isto bitno), i daj nam strukturu tvoje 3 tabele za koje pravis upit. Ja tvrdim da bi upit koji sam ti poslao trebao biti ispravan - mada, svasta je moguce i svega sam se nagledao u ovom poslu.

Eh da, da nisu u pitanju tabele u DBF ili nekom slicnom formatu koje su samo linkovane u Access?

[Ovu poruku je menjao goranvuc dana 01.09.2005. u 15:45 GMT+1]
[ mika @ 01.09.2005. 14:59 ] @
Postovaću sutra, pošto sad krećem i neću biti pored kompjutera.

I meni deluje da je ok što si mi ti napisao, probaću malo detaljnije od kuće pa ću odgovoriti.

HVALA PUNO na interesovanju!


EDIT: nije u pitanju dbf, već Access FE-BE linkovana baza. Access 2003 je u pitanju.

[Ovu poruku je menjao mika dana 01.09.2005. u 16:08 GMT+1]