如何在MSAccess中查询两个表之间的相同数据值
Access两表相同值查找实现方案
方案1:SQL内连接查询(优先推荐)
无需编写VBA循环,直接用SQL查询即可快速得到匹配结果,性能远高于遍历循环。
示例代码(将表名、字段名替换为你实际的内容即可):
-- 单字段匹配示例:比对两个表的【客户ID】字段 SELECT 表1.*, 表2.* FROM 表1 INNER JOIN 表2 ON 表1.客户ID = 表2.客户ID;
-- 多字段匹配示例:同时比对【客户ID】和【订单编号】两个字段 SELECT 表1.*, 表2.* FROM 表1 INNER JOIN 表2 ON 表1.客户ID = 表2.客户ID AND 表1.订单编号 = 表2.订单编号;
操作方法:打开Access→创建→查询设计→关闭弹出的表选择窗口→切换到SQL视图→粘贴修改后的语句→点击运行即可。
方案2:VBA循环实现(仅适用于特殊自定义比对场景)
如果你的比对逻辑无法通过SQL实现,可以用以下VBA代码遍历比对:
Sub 查找两表匹配值() Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, rsRes As DAO.Recordset ' 打开待比对的两个表,替换为你自己的表名和比对字段名 Set rs1 = CurrentDb.OpenRecordset("SELECT 比对字段 FROM 表1", dbOpenDynaset) Set rs2 = CurrentDb.OpenRecordset("SELECT 比对字段 FROM 表2", dbOpenDynaset) ' 提前创建一个空表【匹配结果】,用于存储结果,包含字段【匹配值】 Set rsRes = CurrentDb.OpenRecordset("匹配结果", dbOpenDynaset) Do While Not rs1.EOF ' 数字类型字段用:rs2.FindFirst "比对字段 = " & rs1!比对字段 rs2.FindFirst "比对字段 = '" & rs1!比对字段 & "'" If Not rs2.NoMatch Then rsRes.AddNew rsRes!匹配值 = rs1!比对字段 rsRes.Update End If rs1.MoveNext Loop ' 释放资源 rs1.Close: rs2.Close: rsRes.Close Set rs1 = Nothing: Set rs2 = Nothing: Set rsRes = Nothing MsgBox "比对完成,结果已存入【匹配结果】表" End Sub
注意事项
- 比对字段为数字类型时,删除
FindFirst语句里的单引号 - 数据量超过1000条时优先使用SQL方案,循环遍历的性能会大幅下降
- 如果需要查询表1有但表2没有的记录,将内连接改为左连接后筛选
表2.比对字段 IS NULL即可
内容的提问来源于stack exchange,提问作者Jetnipit Twinwut
相关产品推荐
相关产品推荐

