使用OleDbCommand查询Access数据库时双内连接SQL语法报错
解决Access多内连接SQL的语法错误问题
我完全懂你这种摸不着头脑的感觉——明明照着示例写的多表JOIN,结果Access偏报“缺少运算符”的语法错误。问题的核心在于Access的Jet SQL引擎对多表连接的语法有特殊要求,和你可能参考的标准SQL(比如SQL Server、MySQL)不一样。
错误原因分析
你现在的查询写法大概是这样的(模拟你的错误语句):
SELECT * FROM TB_CRED cred INNER JOIN TB_REL_USR_CRED rel ON cred.CRED_ID = rel.REL_USR_CRED_CRED_ID INNER JOIN TB_USERS usr ON usr.USR_ID = rel.REL_USR_CRED_USER_ID
这种连续的INNER JOIN写法在标准SQL里没问题,但Access要求必须把前两个表的连接结果用括号括起来,再和第三个表进行连接。Jet引擎无法识别未分组的连续JOIN,所以会抛出“缺少运算符”的异常。
修正后的正确写法
把第一个JOIN的部分用括号包裹,让Access能正确解析连接顺序:
SELECT * FROM (TB_CRED cred INNER JOIN TB_REL_USR_CRED rel ON cred.CRED_ID = rel.REL_USR_CRED_CRED_ID) INNER JOIN TB_USERS usr ON usr.USR_ID = rel.REL_USR_CRED_USER_ID
如果后续需要连接更多表,也要遵循这个嵌套括号的规则,比如四个表连接的话,结构会是((表1 JOIN 表2) JOIN 表3) JOIN 表4。
额外提示
很多网上的SQL示例都是基于标准SQL方言的,Access的Jet SQL有不少独有的语法限制,遇到这类问题时,优先参考Access官方的SQL语法文档或者针对Access的教程,就能避开这类坑啦。
内容的提问来源于stack exchange,提问作者Daniel Müller
相关产品推荐
相关产品推荐

