Zapytanie do bazy Access - dwa x JOIN

0

Witam.

Proszę o pomoc z zapytaniem Access'owym...
Podejrzewam że to coś banalnego (dlatego wybrałem dział Newbie), ale nie mam pomysłu co to (z Accessem nie mam w ogóle doświadczenia....).

Wywołując takie zapytanie:

SELECT Towary.Id, Towary.Nazwa, HistoriaFin.IdDokFin, HistoriaFin.Ilosc, DokFin.DataWystawienia  
FROM Towary
LEFT JOIN HistoriaFin ON HistoriaFin.IdTowaru = Towary.Id
LEFT JOIN DokFin ON DokFin.Id = HistoriaFin.IdDokFin 

otrzymuje błąd:

Wystąpił błąd:
3075 --- Błąd składniowy (brak operatora) w wyra¿eniu kwerendy 'HistoriaFin.IdTowaru = Towary.Id
LEFT JOIN DokFin ON DokFin.Id = HistoriaFin.IdDokFin'.

Próbowałem zlokalizować błąd rozbierając zapytanie na części pierwsze:

SELECT Id, Nazwa FROM Towary

SELECT Id, IdTowaru, IdDokFin, Ilosc FROM HistoriaFin

SELECT Id, DataWystawienia FROM DokFin

SELECT Towary.Id, Towary.Nazwa, HistoriaFin.IdDokFin, HistoriaFin.Ilosc 
FROM Towary
LEFT JOIN HistoriaFin ON HistoriaFin.IdTowaru = Towary.Id

SELECT HistoriaFin.Id, HistoriaFin.IdTowaru, HistoriaFin.IdDokFin, HistoriaFin.Ilosc, DokFin.DataWystawienia 
FROM HistoriaFin
LEFT JOIN DokFin ON DokFin.Id = HistoriaFin.IdDokFin

Wszystkie zapytania wykonują się poprawnie.

0

Jeśli to stary access to tak ma (nowe nie wiem, nie używałem), i rozwiązaniem będzie (z tego co pamiętam, ale mogę się mylić) użycie inner join. Zobacz też, jak skonstruuje Ci zapytanie "wizualny kreator".

0

@fourfour dziękuję za odpowiedź.

Nie pomyślałem o użyciu kreatora.

Podpowiedział takie zapytanie:

SELECT `Towary`.`Id`, `Towary`.`Nazwa`, `HistoriaFin`.`IdDokFin`, `Towary`.`Ilosc`, `DokFin`.`DataWystawienia` 
FROM `HistoriaFin`, `Towary`, `DokFin` 
WHERE `HistoriaFin`.`IdTowaru` = `Towary`.`Id` AND `DokFin`.`Id` = `HistoriaFin`.`IdDokFin` 

Co prawda wole używać JOIN'ów niż robić to w ten sposób ale skoro nie ma wyboru.... :)

0

Jednak sobie nie poradzę z tego typu konstrukcją...

Potrzebuje dodać zakres dat wyszukiwania, jeśli dodam

 `DokFin`.`DataSprzedazy` = {D '2013-05-04' }` 

to ograniczy mi wynik do towarów które były sprzedane w tym okresie, natomiast ja potrzebuje listę wszystkich + ilości sprzedanych w tym okresie...

0

Ten kreator coś Ci źle podpowiedział - powinien dać jakieś join. Może nie masz ustawionych tych akcesowych "relacji" dla tabel? Gdybam tylko, ale może się to przyda... :)

0

Access to dla mnie magia.... :)

To zapytanie powoduje błąd:

SELECT Towary.Id, Towary.Nazwa, HistoriaFin.IdDokFin, HistoriaFin.Ilosc, DokFin.DataWystawienia  
FROM Towary
LEFT JOIN HistoriaFin ON HistoriaFin.IdTowaru = Towary.Id
LEFT JOIN DokFin ON DokFin.Id = HistoriaFin.IdDokFin
WHERE  DokFin.DataWystawienia  BETWEEN  #2014-01-02# AND #2014-02-02#

To zapytanie jest poprawne:

SELECT Towary.Id, Towary.Nazwa, HistoriaFin.IdDokFin, HistoriaFin.Ilosc, DokFin.DataWystawienia  
FROM (Towary
LEFT JOIN HistoriaFin ON HistoriaFin.IdTowaru = Towary.Id)
LEFT JOIN DokFin ON DokFin.Id = HistoriaFin.IdDokFin
WHERE  DokFin.DataWystawienia  BETWEEN  #2014-01-02# AND #2014-02-02# 

Wystarczyło dodać nawiasy, które nie mam pojęcia jak działają :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1