如何在Access中合并字段不同且存在关联键的两个记录集
错误原因
你之前的查询仅通过ID1字段关联两个表,未将ID2纳入关联条件,当同一个ID1下存在多个不同ID2的记录时,会生成笛卡尔积匹配,最终导致结果要么出现冗余错误行,要么过滤后丢失预期行。
正确实现方案
你可以先提取两个表中所有的(ID1, ID2)组合去重得到完整的键值对集合,再分别左关联两个表取对应数据字段即可,Access环境下可直接执行以下SQL:
SELECT t.ID1, t.ID2, Table_1.Data_1, Table_2.Data_2 FROM ( SELECT ID1_1 AS ID1, ID2_1 AS ID2 FROM Table_1 UNION SELECT ID1_2 AS ID1, ID2_2 AS ID2 FROM Table_2 ) AS t LEFT JOIN Table_1 ON t.ID1 = Table_1.ID1_1 AND t.ID2 = Table_1.ID2_1 LEFT JOIN Table_2 ON t.ID1 = Table_2.ID1_2 AND t.ID2 = Table_2.ID2_2 ORDER BY t.ID1, t.ID2;
逻辑说明
- 内层查询使用
UNION自动对两个表的(ID1,ID2)组合去重,得到所有需要输出的行的主键组合 - 外层关联两个表时同时匹配ID1和ID2两个字段,可精准获取对应数据,不存在的字段自然返回空值,完全匹配预期输出结果
内容的提问来源于stack exchange,提问作者NewSites
相关产品推荐
相关产品推荐

