这在Access中似乎是一个相当普遍的问题,但在研究了多个线程并尝试了所有类型的变体之后,我仍然无法找到解决问题的方法。
这是一个简单的Select查询,运行得很好,从Access表和链接的Oracle表中提取数据:
SELECT a.WELL_UWI, b.MAIN_FORM
FROM (SELECT WELL_UWI, MAIN_FORM
FROM tmp_form) AS b
INNER JOIN eauser_nfx_hz_well_summary AS a
ON b.WELL_UWI = a.WELL_UWI;
我将其修改为更新查询,以便从Access表中的数据更新链接的Oracle表,如下所示:
UPDATE a
SET a.MAIN_HZ_FM = b.MAIN_FORM
FROM (SELECT WELL_UWI, MAIN_FORM
FROM tmp_form) AS b
INNER JOIN eauser_nfx_hz_well_summary AS a
ON b.WELL_UWI = a.WELL_UWI;
我最后收到了这条消息:
查询表达式'b.MAIN_FORM FROM中的语法错误(缺少运算符) (从tmp_form中选择WELL_UWI,MAIN_FORM)AS b INNER JOIN eauser_nfx_hz_well_summary AS a ON b.WELL_UWI = a.WELL_UWI
知道我缺少什么吗?
谢谢!
答案 0 :(得分:2)
Access具有不同的更新语法。所有表格都是在UPDATE
关键字后直接指定的,并且没有FROM
:
UPDATE (SELECT WELL_UWI, MAIN_FORM
FROM tmp_form) AS b
INNER JOIN eauser_nfx_hz_well_summary AS a
ON b.WELL_UWI = a.WELL_UWI
SET a.MAIN_HZ_FM = b.MAIN_FORM;
请注意,在Access中,完整查询(包括所有子查询)需要是可更新的。您无法指定您只更新特定的表格。
如果您遇到锁定或不可更新的表格问题,通常可以使用DLookUp
来避免这些问题:
UPDATE eauser_nfx_hz_well_summary AS a
SET a.MAIN_HZ_FM = DLookUp("MAIN_FORM", "tmp_form", "WELL_UWI = '" & a.WELL_UWI & "'")
答案 1 :(得分:0)
我没有权限测试这个SQL,但我认为它会起作用。您使用了错误的语法,UPDATE语句不能跟随FROM子句。
UPDATE eauser_nfx_hz_well_summary a
SET a.MAIN_HZ_FM =
(SELECT b.MAIN_FORM from tmp_form b INNER JOIN eauser_nfx_hz_well_summary a1 ON b.WELL_UWI = a1.WELL_UWI AND a.WELL_UWI = a1.WELL_UWI)