如何在MS Access中合并3个不同字段名的单字段查询
正确合并单字段查询为多字段查询的方法
你用追加查询(UNION/UNION ALL)是方向错了——追加是纵向合并行,而你要的是横向合并字段,所以才会出现大量重复/冗余记录。以下分两种场景给出解决方案:
场景1:三个查询有共同关联键(比如ID、日期等匹配字段)
如果三个查询的记录可以通过某个共同字段(比如ID)一一对应,用JOIN来关联匹配行:
保留三查询都有匹配的行(INNER JOIN)
SELECT q1.Field1, q2.Field2, q3.Field3 FROM Query1 q1 INNER JOIN Query2 q2 ON q1.关联字段 = q2.关联字段 INNER JOIN Query3 q3 ON q1.关联字段 = q3.关联字段;
保留某一查询的所有行,其他无匹配则字段为空(LEFT JOIN)
如果某个查询可能存在无匹配的记录,换成左连接:
SELECT q1.Field1, q2.Field2, q3.Field3 FROM Query1 q1 LEFT JOIN Query2 q2 ON q1.关联字段 = q2.关联字段 LEFT JOIN Query3 q3 ON q1.关联字段 = q3.关联字段;
场景2:三个查询都是单条记录(无关联键)
如果每个查询仅返回一行数据,直接用交叉连接或子查询取字段:
交叉连接(CROSS JOIN)
SELECT q1.Field1, q2.Field2, q3.Field3 FROM Query1 q1 CROSS JOIN Query2 q2 CROSS JOIN Query3 q3;
子查询直接取值
SELECT (SELECT Field1 FROM Query1) AS Field1, (SELECT Field2 FROM Query2) AS Field2, (SELECT Field3 FROM Query3) AS Field3;
为什么追加查询会出问题?
追加查询是把三个查询的行全部纵向拼接,比如Query1有10行、Query2有20行、Query3有30行,追加后会得到60行(每行仅一个字段有值,其余为NULL)。如果后续误操作做了全连接,会触发笛卡尔积,生成10×20×30=6000条冗余记录,这就是你看到的“大量重复”。
内容的提问来源于stack exchange,提问作者Jayvee
相关产品推荐
相关产品推荐

