MS Acess, SQL and multiple joins

I have been working on a project for one of my customer today and came across a – well should we say – “Interesting” side od MS Access. Yes the customer has an old database in MS Access that we need to produce some reports from (in Excel).

So I did a normal SQL with some joins and got an error.

Here is the SQL i started with:

SELECT
Persons.Person_Id AS ‘Person_Id’  ,Abstracts.Abstract_Title AS ‘Abstract_Title’
,TopicsPerAbstract.Topic_Id AS ‘Topic_Id’
FROM
Abstracts
INNER JOIN Persons  ON
Abstracts.Client_Id = Persons.Client_Id
AND Abstracts.Project_Id = Persons.Project_Id
AND Abstracts.Person_Id = Persons.Person_Id
LEFT OUTER JOIN  TopicsPerAbstract  ON
Abstracts.Client_Id = TopicsPerAbstract.Client_Id
AND Abstracts.Project_Id = TopicsPerAbstract.Project_Id
AND Abstracts.Person_Id = TopicsPerAbstract.Person_Id

And I got an error back from Access – missing operand.

Well after staing on this for quite some time and trying to figure out where the error is I came across a post on the net.

Apparently MS Access need to have ( ) around JOINS to get around missing operand problem.

So the working SQL is here:

SELECT
Persons.Person_Id AS ‘Person_Id’  ,Abstracts.Abstract_Title AS ‘Abstract_Title’
,TopicsPerAbstract.Topic_Id AS ‘Topic_Id’
FROM ((
Abstracts
)
INNER JOIN Persons  ON
Abstracts.Client_Id = Persons.Client_Id
AND Abstracts.Project_Id = Persons.Project_Id
AND Abstracts.Person_Id = Persons.Person_Id
)
LEFT OUTER JOIN  TopicsPerAbstract  ON
Abstracts.Client_Id = TopicsPerAbstract.Client_Id
AND Abstracts.Project_Id = TopicsPerAbstract.Project_Id
AND Abstracts.Person_Id = TopicsPerAbstract.Person_Id

Weird

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.