MS Access 13中含多值附件字段的两表UNION合并失败求助
解决Access中附件字段的UNION查询问题
嘿,我之前在处理Access附件字段的时候也踩过这个坑,给你分享几个可行的解决思路:
为什么直接UNION会失败?
Access的附件字段是多值复合类型,它本质上是把多个文件关联到同一个主键记录下的子集合。直接用UNION合并包含这类字段的表时,Access无法处理这种嵌套的多值结构,所以会报错。
解决方案:拆分附件字段后再合并
我们需要先把每个表中的附件字段拆成单条记录(每个文件对应一行),再用UNION ALL合并结果。具体步骤如下:
1. 编写单表的附件展开查询
针对你的两张表,分别写出展开附件字段的SQL。假设你的两张表名为TableA_P(A-P文档)和TableQ_Z(Q-Z文档),主键列是ID,两个附件字段是Attach1和Attach2:
-- 展开TableA_P的附件 SELECT ID, Attach1.FileName AS Attach1_FileName, Attach1.FileData AS Attach1_FileData, Attach1.FileType AS Attach1_FileType, Attach2.FileName AS Attach2_FileName, Attach2.FileData AS Attach2_FileData, Attach2.FileType AS Attach2_FileType FROM TableA_P -- 可选:过滤掉没有任何附件的记录 WHERE Attach1.FileName IS NOT NULL OR Attach2.FileName IS NOT NULL
对TableQ_Z做完全相同的查询,只是把表名替换成TableQ_Z即可。
2. 用UNION ALL合并两个展开后的查询
把上面两个查询用UNION ALL组合起来,就能得到覆盖A-Z所有文档的结果,还能直接保存成新表:
SELECT * INTO CombinedAttachmentsTable FROM ( -- 第一张表的附件展开 SELECT ID, Attach1.FileName AS Attach1_FileName, Attach1.FileData AS Attach1_FileData, Attach1.FileType AS Attach1_FileType, Attach2.FileName AS Attach2_FileName, Attach2.FileData AS Attach2_FileData, Attach2.FileType AS Attach2_FileType FROM TableA_P UNION ALL -- 第二张表的附件展开 SELECT ID, Attach1.FileName AS Attach1_FileName, Attach1.FileData AS Attach1_FileData, Attach1.FileType AS Attach1_FileType, Attach2.FileName AS Attach2_FileName, Attach2.FileData AS Attach2_FileData, Attach2.FileType AS Attach2_FileType FROM TableQ_Z ) AS CombinedResults
3. 说明和注意事项
- 优先用
UNION ALL:UNION会自动去重,但附件数据体积大,去重会严重拖慢查询速度;如果两张表没有重复的主键+附件组合,UNION ALL完全够用。 - 结果表的结构:每个文件对应一行记录,同一个主键可能会有多条行(对应多个附件),这是正常的——因为我们把多值的附件拆成了单条记录。
- 后续展示:如果需要在表单或报表中展示同一个主键下的所有附件,基于这个合并后的表做分组展示即可。
内容的提问来源于stack exchange,提问作者tanvi
相关产品推荐
相关产品推荐

