MS Access使用Analyze Table后去重并维护表关联的技术问题
拆分扁平表并去重的实操方案
1. 先明确三个目标表的核心结构
先把关联逻辑捋清楚,避免后续混乱:
- BOOKS:存书籍核心信息(用ISBN当主键,因为它天然唯一)
- 字段:
ISBN(主键)、TITLE、AUTHOR、PURCHASE COST、PURCHASE DATE、ShelvingID(外键,关联存放位置表)、PersonID(外键,关联借阅人表)
- 字段:
- PEOPLE:存唯一的借阅人信息(用自动编号当主键,避免重名导致的重复)
- 字段:
PersonID(自动编号,主键)、FIRST NAME、LAST NAME、PHONE、OFFICE
- 字段:
- SHELVING:存唯一的存放位置信息(同样用自动编号当主键)
- 字段:
ShelvingID(自动编号,主键)、AISLE、BOOKCASE、SHELF
- 字段:
2. 分步去重并建立关联
第一步:生成无重复的PEOPLE表
在Access里新建查询,直接提取原表中唯一的人员记录:
SELECT DISTINCT [FIRST NAME], [LAST NAME], [PHONE], [OFFICE] INTO PEOPLE FROM 你的扁平表名称;
生成表后,给PEOPLE表加一个自动编号类型的PersonID字段,设为主键。
第二步:生成无重复的SHELVING表
用同样的思路提取唯一的存放位置:
SELECT DISTINCT [AISLE], [BOOKCASE], [SHELF] INTO SHELVING FROM 你的扁平表名称;
给SHELVING表加自动编号类型的ShelvingID字段,设为主键。
第三步:生成关联后的BOOKS表
通过关联查询,把原表的书籍信息和新生成的两个表绑定,同时保留原有的对应关系:
SELECT 原表.ISBN, 原表.TITLE, 原表.AUTHOR, 原表.[PURCHASE COST], 原表.[PURCHASE DATE], PEOPLE.PersonID, SHELVING.ShelvingID INTO BOOKS FROM (你的扁平表名称 AS 原表 INNER JOIN PEOPLE ON 原表.[FIRST NAME] = PEOPLE.[FIRST NAME] AND 原表.[LAST NAME] = PEOPLE.[LAST NAME] AND 原表.[PHONE] = PEOPLE.[PHONE] AND 原表.[OFFICE] = PEOPLE.[OFFICE]) INNER JOIN SHELVING ON 原表.[AISLE] = SHELVING.[AISLE] AND 原表.[BOOKCASE] = SHELVING.[BOOKCASE] AND 原表.[SHELF] = SHELVING.[SHELF];
生成BOOKS表后,把ISBN设为主键,PersonID和ShelvingID设为外键,分别关联PEOPLE和SHELVING表的主键。
3. 验证和补漏
- 打开Access的关系视图,检查三个表的关联是否正确:BOOKS的
PersonID连PEOPLE的PersonID,ShelvingID连SHELVING的ShelvingID - 检查是否有遗漏记录:用原表和BOOKS表做左连接,确认所有书籍都被正确导入
- 如果发现存放位置有拼写差异(比如"Aisle 1"和"aisle 1"),先在原表统一格式再重新执行去重,避免生成重复的位置记录
内容的提问来源于stack exchange,提问作者synthetic
相关产品推荐
相关产品推荐

