MS Access两表间多关系场景下 从SQL Server创建查询求助
MS Access 对接SQL Server 多重关系表查询实操方案
前置校验
- 确认所用SQL Server表为Access ODBC链接表:导航栏中表图标旁带小地球标识为有效链接表,若为本地导入表需重新配置ODBC数据源后重新链接。
- 确认SQL Server侧两表的关联字段数据类型完全匹配,避免隐式转换导致的关联失败或结果异常。
多重关系查询配置步骤
两表多重关系通常分为两类:多字段关联(两表通过2个及以上字段匹配)、同表多角色关联(一张表的不同字段关联另一张表的同一主键,比如订单表的下单人、审核人都关联用户表ID),两类场景操作方法如下:
可视化设计器操作
- 点击Access顶部「创建」-「查询设计」,添加所需的两张关联表后关闭表选择窗口。
- 拖拽第一张表的第一个关联字段到第二张表对应匹配字段,双击生成的连线选择关联类型(内连接/左连接/右连接),确认后保存。重复该操作直到所有关联字段都完成连线。
- 在下方字段选择区勾选需要返回的字段,点击「运行」即可查看结果。
SQL语句直接编写(更适合复杂关联场景)
如果可视化设计器无法满足需求,直接切换到SQL视图编写语句,注意Access多JOIN语法要求嵌套括号,示例如下:
-- 同表多角色关联示例:订单表关联用户表的两个不同字段 SELECT od.订单ID, od.下单时间, u1.用户名 AS 下单用户名, u2.用户名 AS 审核用户名 FROM (SQLServer_dbo_订单表 od LEFT JOIN SQLServer_dbo_用户表 u1 ON od.下单用户ID = u1.用户ID) LEFT JOIN SQLServer_dbo_用户表 u2 ON od.审核用户ID = u2.用户ID WHERE od.下单时间 >= '2024-01-01'
-- 多字段关联示例:入库表和出库表通过仓库ID+商品ID两个字段关联 SELECT rk.仓库ID, rk.商品ID, rk.入库数量, ck.出库数量 FROM SQLServer_dbo_入库表 rk INNER JOIN SQLServer_dbo_出库表 ck ON rk.仓库ID = ck.仓库ID AND rk.商品ID = ck.商品ID
常见异常处理
- 报错「不支持JOIN表达式」:检查多JOIN语句是否添加了嵌套括号,Access要求超过1层的JOIN必须用括号包裹层级,调整语法即可。
- 查询结果重复:检查是否有遗漏的关联条件,或关联字段存在空值,在WHERE子句补充
关联字段 IS NOT NULL过滤即可。 - 查询运行卡顿:数据量超过10万行时建议创建直通查询(Pass-Through Query),直接将SQL语句发送到SQL Server执行后返回结果,无需Access本地运算,性能提升明显。
- 无法保存查询:检查字段名是否和Access保留字冲突,给冲突字段添加别名即可解决。
内容的提问来源于stack exchange,提问作者Newbie2021
相关产品推荐
相关产品推荐

