Microsoft Access is confused

Photo by Bill Aboudi on Unsplash.

The other day while working on a legacy Microsoft Access database I was reminded of how bizarre Access can be. When I ran the following query:

SELECT * FROM ([Authors]
INNER JOIN [Publications]
ON [Authors].id = Str([Publications].[authors].VALUE))
WHERE ( [Publications].[date] BETWEEN [Begin Date] AND [End Date] )

I received a peculiar error:

Microsoft Access The SQL statement could not be executed because it contains ambiguous outer joins. To force one of the joins to be performed first, create a separate query that performs the first join and then include that query in your SQL statement.

For a query with no outer joins, this was terribly unhelpful.

Researching the error, I found solutions like, "change all of the joins to INNER" which obviously didn't help me. So I began trying solutions that didn't make sense. Ultimately I found a version that worked:

SELECT * FROM ([Publications]
LEFT JOIN [Authors]
ON [Authors].id = Str([Publications].[authors].VALUE))
WHERE ( [Publications].[date] BETWEEN [Begin Date] AND [End Date] )

By reversing the order of the tables and changing the INNER join to a LEFT join, the query works. Neither change solved the problem alone.

So next time you're faced with a confusing Microsoft Access error message, try doing the opposite!

Drew

Drew

Hi! I'm Drew, the Wimpy Programmer. I'm a software developer and formerly a Windows server administrator. I use this blog to share my mistakes and ideas.