MS Access三表连接报错‘JOIN EXPRESSION NOT SUPPORTED’求解
解决MS Access中“JOIN EXPRESSION NOT SUPPORTED”错误的方法
我之前在Access里处理多表连接时也踩过这个坑,你的问题根源在于Access的Jet SQL引擎对JOIN条件的限制——它不允许在单个ON子句中同时引用来自三个不同层级表的字段。你原来的SQL里,第二个LEFT JOIN的ON子句同时用到了主表A_01HWeekEHCalendar、中间表A_ProductGroup和目标表A00_Plant的字段,这就触发了那个错误。
不用拆分查询也能解决,给你两种可行的调整方案:
方案一:使用子查询预先组合关联表
把A_ProductGroup和A00_Plant的连接逻辑放到子查询里,生成一个包含所需关联字段的临时结果集,再和主表连接。这样每个JOIN的ON子句只涉及两个表的字段,Access就能正常解析了:
SELECT eh.RunNo_H, eh.Audit_Week, eh.CurrentYear, eh.CurrentWeek, eh.TTSMonth, eh.Audit_Plant, eh.Audit_plantname, eh.Audit_Qacode, eh.Audit_Qaname, eh.Audit_Product, pg_p.HCA_StartDate FROM A_01HWeekEHCalendar eh LEFT JOIN (SELECT pg.R_Code, p.Plant_Name, p.Plant_Code, p.HCA_StartDate FROM A_ProductGroup pg LEFT JOIN A00_Plant p ON pg.R_Code = p.Plant_Product) AS pg_p ON eh.Audit_Product = pg_p.R_Code AND eh.Audit_plantname = pg_p.Plant_Name AND eh.Audit_Plant = pg_p.Plant_Code;
方案二:调整JOIN层级结构
如果不想用子查询,也可以重新组织JOIN的嵌套顺序,确保每个ON子句只关联直接连接的两个表。不过这种写法可读性稍差:
SELECT eh.RunNo_H, eh.Audit_Week, eh.CurrentYear, eh.CurrentWeek, eh.TTSMonth, eh.Audit_Plant, eh.Audit_plantname, eh.Audit_Qacode, eh.Audit_Qaname, eh.Audit_Product, p.HCA_StartDate FROM A_01HWeekEHCalendar eh LEFT JOIN A00_Plant p ON eh.Audit_plantname = p.Plant_Name AND eh.Audit_Plant = p.Plant_Code LEFT JOIN A_ProductGroup pg ON eh.Audit_Product = pg.R_Code AND pg.R_Code = p.Plant_Product;
注意事项
- 优先选方案一,子查询的写法更直观,也更容易维护。
- Access对LEFT JOIN的嵌套逻辑比较敏感,尽量避免跨层级引用字段,确保每个JOIN的条件只涉及当前连接的两个表。
内容的提问来源于stack exchange,提问作者tmo
相关产品推荐
相关产品推荐

