You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:15:04