MS Access VBA中自连接UPDATE语句语法错误,SQL Server可正常运行
解决MS Access VBA中UPDATE JOIN的语法错误问题
你的SQL语句在SQL Server中可行,但MS Access Jet SQL的UPDATE语法和SQL Server存在差异,不支持FROM子句中嵌套JOIN的写法。针对你“将ID=180的行作为模板,复制内容到相同Part_Nr的其他行”的需求,提供两种正确的Access SQL写法:
方法1:使用Access原生UPDATE JOIN语法
这种写法更高效,适合批量更新:
UPDATE tbl_Parts AS a INNER JOIN (SELECT Result, Part, Part_Nr FROM tbl_Parts WHERE ID = 180) AS b ON a.Part_Nr = b.Part_Nr SET a.Result = b.Result, a.Part = b.Part WHERE a.ID <> 180; -- 避免更新模板行本身
方法2:使用子查询方式
如果更习惯子查询逻辑,也可以用这种写法:
UPDATE tbl_Parts SET Result = (SELECT Result FROM tbl_Parts WHERE ID = 180), Part = (SELECT Part FROM tbl_Parts WHERE ID = 180) WHERE Part_Nr = (SELECT Part_Nr FROM tbl_Parts WHERE ID = 180) AND ID <> 180; -- 排除模板行,防止自更新
关键说明
- Access要求UPDATE语句中如果使用JOIN,必须将JOIN直接放在
UPDATE关键字之后,而非通过FROM子句引入 - 加上
ID <> 180的条件是为了避免重复更新模板行本身(虽然不影响结果,但能减少不必要的操作) - 表别名建议使用
AS关键字,这是Access SQL的规范写法
内容的提问来源于stack exchange,提问作者karlo922
相关产品推荐
相关产品推荐

