'Syntax error of missing operator when trying to use Inner Join (Access VBA)
I have tried for quite a while now to fix the missing operator error in the below code, which occurred after i added the INNER JOIN.
Any help is appreciated
Set qdf = CurrentDb.CreateQueryDef("", " SELECT PlantCode, PotSize, WeightToWatch, DateWatered, WeightAfter FROM ListWaterings " & _
" WHERE DateWatered = (SELECT MAX(T1.DateWatered) FROM ListWaterings AS T1 WHERE T1.PlantCode = ListWaterings.PlantCode) " & _
" INNER JOIN ListPlants ON ListPlants.PlantCode = ListWaterings.PlantCode "
The result i am trying to accomplish is the following
Table called ListPlants (simplified)
| PlantCode | PotSize | WeightToWatch |
|---|---|---|
| 18 | 15 | 1200 |
| 19 | 22 | 1450 |
A Table called ListWaterings
| PlantCode | Date Watered | WeightAfter |
|---|---|---|
| 18 | 23-03-2022 15:50 | 1250 |
| 19 | 23-03-2022 15:51 | 1500 |
| 18 | 23-03-2021 15:50 | 1300 |
| 19 | 23-03-2021 15:51 | 1550 |
And the result of my query would look like
| PlantCode | DateWatered | WeightAfter | Potsize | WeightToWatch |
|---|---|---|---|---|
| 18 | 23-03-2022 15:50 | 1250 | 15 | 1200 |
| 19 | 23-03-2022 15:51 | 1500 | 22 | 1450 |
Solution 1:[1]
T2 is just an alias of the scalar value returned by
(SELECT MAX(T1.DateWatered) FROM ListWaterings AS T1 WHERE T1.PlantCode = ListWaterings.PlantCode)
You're not referring to this anywhere else so you really don't need it, and certainly not in the ON clause of your JOIN. I think this is just a typo. Perhaps what you meant to say is
SELECT PlantCode,
DateWatered,
WeightAfter
FROM ListWaterings
WHERE DateWatered =
(SELECT MAX(T1.DateWatered)
FROM ListWaterings AS T1
WHERE T1.PlantCode = ListWaterings.PlantCode)
INNER JOIN ListPlants
ON ListPlants.PlantCode = ListWaterings.PlantCode
EDIT I misplaced the WHERE before the JOIN. And OP added a few more fields to the output so here should be the correct syntax:
SELECT ListPlants.PlantCode,
ListWaterings.[DateWatered],
ListWaterings.WeightAfter,
ListPlants.PotSize,
ListPlants.WeightToWatch
FROM ListPlants
INNER JOIN ListWaterings
ON ListPlants.PlantCode = ListWaterings.PlantCode
WHERE ListWaterings.[DateWatered]=
(SELECT MAX(T1.DateWatered)
FROM ListWaterings AS T1
WHERE T1.PlantCode = ListWaterings.PlantCode)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
