Access中生成表查询调用传递查询时出现字段引用歧义问题
嘿,这个问题我之前在处理Access多表查询的时候也踩过坑!Access对字段的来源识别特别严格,尤其是当同一个字段名出现在多个关联的表(包括传递查询返回的结果集)里时,它就会犯“选择困难症”,抛出你看到的这个歧义错误。下面给你几个具体的解决思路:
给字段明确指定来源表/别名
不管是在传递查询的SQL里,还是生成表查询的SELECT语句中,都不要只写vaultLocation,而是加上它所属的表名或者表别名。比如如果你的传递查询别名是passThru3,那就在生成表查询里写成passThru3.vaultLocation;如果传递查询内部关联了多个表,那在传递查询的SQL里就给每个表的vaultLocation加不同的别名,比如:-- 修改后的传递查询SQL SELECT TableA.vaultLocation AS MainVault, TableB.vaultLocation AS BackupVault, OtherField FROM TableA JOIN TableB ON TableA.ID = TableB.ID这样生成表查询里直接用
MainVault或者BackupVault就不会有歧义了。检查生成表查询的关联逻辑
如果你是把传递查询和本地表做了JOIN操作,一定要确认两个表里是不是都有vaultLocation字段。如果是,那必须给每个字段都加上表前缀或者别名,比如:-- 修改后的生成表查询SQL SELECT passThru3.vaultLocation AS RemoteVault, LocalTable.vaultLocation AS LocalVault, CommonField INTO NewTargetTable FROM passThru3 INNER JOIN LocalTable ON passThru3.RecordID = LocalTable.RecordID先把传递查询结果存为临时表
如果觉得关联查询的字段处理太麻烦,可以先把传递查询的结果生成一个本地临时表,再基于这个临时表做生成表操作。比如先运行这句SQL生成临时表:SELECT * INTO Temp_PassThru_Results FROM passThru3之后直接对
Temp_PassThru_Results做生成表查询,因为临时表里的字段来源唯一,就不会出现歧义问题了。清理冗余字段
检查一下你的传递查询或者生成表查询里,是不是不小心同时选中了多个表的vaultLocation字段?如果有些字段是不需要的,直接删掉就好,这样也能避免冲突。
内容的提问来源于stack exchange,提问作者Shaves

