Access跨表更新查询问题:相同SHPMT ID下FILERENTRYNBR更新错误
解决Access批量更新多匹配行的问题
核心问题原因
你当前只用SHPMT ID做关联条件,当该字段存在重复值时,Access的更新查询会随机选取源表中的一条匹配记录更新所有目标行,导致同一个FILERENTRYNBR被重复赋值。利用PORT ARVL CD与FILERENTRYNBR的唯一对应关系,调整关联条件即可解决。
具体解决方案
方法1:通过设计视图修改更新查询
- 打开Access,创建或打开现有更新查询的设计视图
- 添加源表
Current和目标表All Holds - 建立两个关联关系:
- 拖动
Current.SHPMT ID到All Holds.SHPMT ID,建立等值关联 - 拖动
Current.PORT ARVL CD到All Holds.PORT ARVL CD,建立等值关联
- 拖动
- 在目标表
All Holds中选中FILERENTRYNBR字段,在「更新到」行输入[Current].[FILERENTRYNBR] - (可选)若只想更新空值行,添加
[All Holds].[FILERENTRYNBR] Is Null的条件 - 运行查询完成精准匹配更新
方法2:直接使用SQL语句
打开查询的SQL视图,替换为以下语句:
UPDATE [All Holds] INNER JOIN [Current] ON ([All Holds].[SHPMT ID] = [Current].[SHPMT ID]) AND ([All Holds].[PORT ARVL CD] = [Current].[PORT ARVL CD]) SET [All Holds].[FILERENTRYNBR] = [Current].[FILERENTRYNBR] WHERE [All Holds].[FILERENTRYNBR] IS NULL;
注意事项
如果目标表All Holds中的PORT ARVL CD字段为空,需先从源表Current同步该字段的值,再执行上述更新。可通过相同的关联逻辑先更新PORT ARVL CD,确保每行都有唯一匹配的标识。
内容的提问来源于stack exchange,提问作者Johnny O
相关产品推荐
相关产品推荐

