从扁平文件向SQL关系型数据库导入数据时如何填充外键值
解决person表关联teamID的重复关联问题
问题描述
我有三个数据结构:
- 存储待提取信息的扁平文件,结构如下:
name / team / town - team表结构:
teamID / team / town - person表结构:
personID / name / teamID
目前可以用INSERT INTO SELECT语句正常填充team表,但填充person表时遇到瓶颈:无法为每个姓名匹配到对应的teamID。尝试的语句导致每条姓名都与所有teamID重复关联:
INSERT INTO person(name,teamID) SELECT DISTINCT name,teamID FROM file,team
问题原因
你使用的file,team是隐式交叉连接(笛卡尔积),会将两个表的所有行两两组合,自然会出现姓名和所有teamID错误关联的情况。
解决方案
需要通过扁平文件和team表的共同字段(team+town,确保团队唯一)做显式关联,才能匹配到正确的teamID。
完整SQL语句
INSERT INTO person(name, teamID) SELECT DISTINCT f.name, t.teamID FROM file f JOIN team t ON f.team = t.team AND f.town = t.town;
简化场景(如果team名称全局唯一)
如果你的业务中team字段本身是唯一的(不会出现同team名不同town的情况),可以只通过team字段关联:
INSERT INTO person(name, teamID) SELECT DISTINCT f.name, t.teamID FROM file f JOIN team t ON f.team = t.team;
内容的提问来源于stack exchange,提问作者Coni
相关产品推荐
相关产品推荐

