Definitivno je problem u LEFT JOIN upitu,ali kako da ga izbegnem,sta je alternativa tome?
quick report je spor
Zaključano
Zakačeno
A zašto ti treba left join?
Potpis
F
Treba mi za ovo.....slicno je onome sto smo radili,samo je ovo neplaceni racuni.....
SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu left join promet on (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu left join promet on (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
Makni LEFT JOIN i stavi INNER JOIN. Makni ON i stavi na njegovo mjesto WHERE, a WHERE koji imaš sada zamijeni sa AND. Ako sam dobro shvatio upit, trebalo bi ti dati isti rezultat, nema potrebe za left join-om u ovom upitu. Provjeri pa vidi.
Inače, kod left joina (i kod join općenito) je bitno paziti na polja koja uzimaš u upitu, ne uzimati ono šta ne treba, i where dio je bitan, pogotovo indeksiranje.
Inače, kod left joina (i kod join općenito) je bitno paziti na polja koja uzimaš u upitu, ne uzimati ono šta ne treba, i where dio je bitan, pogotovo indeksiranje.
Potpis
F
Izlazi mi Syntax Errorr in from clause...
Napiši ovdje upit koji si napisao.
Ne znam da li access podržava, ali možeš probati FROM table1 as ZaNaplatu, tabela2 as Promet WHERE
Ne znam da li access podržava, ali možeš probati FROM table1 as ZaNaplatu, tabela2 as Promet WHERE
Potpis
F
SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu inner join promet where (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
and (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
FROM ZaNaplatu inner join promet where (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
and (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
Da, ja sam zeznuo. Kada koristiš join moraš imati ON. Probaj u ovo vratiti ON i vrati where gdje je bio, pa javi da li je išta brže.
Code (sql):
SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu INNER JOIN promet ON (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) IS NULL) AND ((Promet.Godina) IS NULL)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
FROM ZaNaplatu INNER JOIN promet ON (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) IS NULL) AND ((Promet.Godina) IS NULL)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
Potpis
F
Šta ti znače tabele ZaNaplatu i Promet. Objasni malo šta je koja.
Potpis
F
Da li za ovaj left join,postoji alternativa,da se nekako drugacije to postavi,posto jos nisam nasao resenje....
SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu left join promet on (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
ZaNaplatu je query,a promet je tabela
SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu left join promet on (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
ZaNaplatu je query,a promet je tabela
izmenjeno 1 put, poslednji put salvaric 15.12.2016. u 13:02
Izmene poruke
- salvaric15.12.2016. u 13:02zapis iz teksta poruke
Mozda ti i jeste problem sto pozivaš tabelu i query od access-a u query-iju, pokusaj da napravis query od tabela (statickih podataka).
Ne vidim razlog zbog kog pozivaš tabelu i query iz accessa, napravi jedan query upit iz Delphi-ja koji će ti odraditi to što tražiš, uzeti podatke iz željenih tabela. Ti otvaraš query query-jem, nisam siguran da je to pametno rešenje, izvodljivo jeste al zahteva dosta vremena, još ako ga stavljaš u neku petlju koja ga ponavlja više puta, smrt.
Ne vidim razlog zbog kog pozivaš tabelu i query iz accessa, napravi jedan query upit iz Delphi-ja koji će ti odraditi to što tražiš, uzeti podatke iz željenih tabela. Ti otvaraš query query-jem, nisam siguran da je to pametno rešenje, izvodljivo jeste al zahteva dosta vremena, još ako ga stavljaš u neku petlju koja ga ponavlja više puta, smrt.
Potpis
Nikad izvini!
Nisam se puno zabavljao, ali left join mu je stvarno jako jako jako spor. Indekse ima na dobrim poljima koliko vidim, where dio nije neki zahtjevan, a ima samo 700-800 zapisa. Ili je access stvarno toliko u klincu ili ima neka caka a da ju ja ne znam ili sam nešto previdio.
Potpis
F
Da,pa video si i sam...stvarno cudno,a pre sam imao mnogo vise upisa i sve je radilo kako treba,a ovo je bas bez veze....