MS Access:如何关联含计算字段的两张表(非合并)
Access员工考勤表关联优化方案
核心思路
放弃用计算字段做表间关联,改用**表1的EmployeeID(主键)**作为表2的关联字段,这是关系型数据库的标准做法,既能解决Access无法基于计算字段建关系的问题,又能自动同步表1的信息变更。
具体操作步骤
1. 调整表结构
- 表1:保留
EmployeeID(建议设为「自动编号」类型并设为主键)、EmployeeName、Departments三个字段,删除计算字段NameAndDepartments——这个组合文本不需要存到表中,后续通过查询/表单动态生成即可。 - 表2:删除原有的
NameAndDepartments字段,新增EmployeeID字段(设为「数字」类型),用来关联表1的员工主键。
2. 设置表2的EmployeeID为下拉Lookup字段
打开表2的设计视图,选中EmployeeID字段,按以下步骤设置:
- 数据类型选择「查阅向导」,选择「使用列表框查阅表或查询中的值」,点击下一步。
- 选择表1作为数据源,点击下一步后,不要直接选字段,点击「查询」按钮创建自定义查询:
SELECT EmployeeID, [EmployeeName] & " from " & [Departments] AS DisplayText FROM 表1; - 保存查询后回到查阅向导,选择该查询作为行来源,设置「绑定列」为
EmployeeID(实际存储的字段),「显示列」为DisplayText(下拉菜单显示的组合文本),把EmployeeID的列宽设为0(隐藏存储的ID值),完成向导设置。
3. 建立表间关系
- 点击顶部菜单栏「数据库工具」→「关系」,把表1和表2拖入关系窗口。
- 拖动表1的
EmployeeID到表2的EmployeeID,弹出对话框后勾选「实施参照完整性」,选择一对多关系(一个员工对应多条考勤记录),点击创建。
4. 查看/编辑时显示组合文本
不需要在表2中存储NameAndDepartments,创建关联查询即可实时显示最新信息:
SELECT 表2.Instance, [表1].[EmployeeName] & " from " & [表1].[Departments] AS NameAndDepartments, 表2.[Late clock-in], 表2.Date FROM 表1 INNER JOIN 表2 ON 表1.EmployeeID = 表2.EmployeeID;
平时查看或编辑考勤数据直接用这个查询(或基于查询做表单),表1的员工姓名/部门变更后,查询里的组合文本会自动同步更新。
方案优势
- 符合关系型数据库设计规范,用主键关联保证数据一致性,避免无效数据。
- 解决了Access无法基于计算字段建关系的限制,同时实现表1信息变更自动同步——组合文本实时从表1读取生成,无需手动更新表2。
- Lookup字段显示友好的组合文本,但实际存储唯一ID,兼顾操作便捷性与数据可维护性。
内容的提问来源于stack exchange,提问作者Gnad
相关产品推荐
相关产品推荐

