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

如何将带外键关联的EMP/DEPT表数据迁移至NEW_EMP/NEW_DEPT表

解决EMP到NEW_EMP的数据迁移并维护外键关联

核心问题分析

你已经完成DEPT到NEW_DEPT的迁移,其中NEW_DEPT.dept_id由序列生成,dname是原DEPT.dname拼接原DEPT.dept_id得到的。现在要迁移EMP到NEW_EMP,关键是建立原DEPT.dept_id与新NEW_DEPT.dept_id的映射关系,才能保证外键关联正确。

方案一:直接通过拼接字段关联映射

利用NEW_DEPT.dname的拼接规则(原dname_原dept_id),反向关联原DEPT表,匹配对应的新dept_id后直接插入NEW_EMP:

INSERT INTO NEW_EMP(emp_id, emp_name, dept_id)
SELECT 
    emp.emp_id,
    emp.emp_name,
    new_dept.dept_id
FROM EMP emp
-- 关联原DEPT获取员工所属部门的原始信息
JOIN DEPT dept ON emp.dept_id = dept.dept_id
-- 通过拼接后的dname匹配NEW_DEPT,拿到新部门ID
JOIN NEW_DEPT new_dept ON new_dept.dname = dept.dname || '_' || dept.dept_id;

方案二:提前存储部门ID映射(更可靠)

如果担心拼接字段可能出现冲突,或者需要复用映射关系,可先创建临时表存储新旧部门ID的对应关系,再完成迁移:

  1. 创建临时映射表:
CREATE TABLE DEPT_MAPPING (old_dept_id NUMBER, new_dept_id NUMBER);
  1. 填充映射关系(基于已插入的NEW_DEPT数据):
INSERT INTO DEPT_MAPPING(old_dept_id, new_dept_id)
SELECT dept.dept_id, new_dept.dept_id
FROM DEPT dept
JOIN NEW_DEPT new_dept ON new_dept.dname = dept.dname || '_' || dept.dept_id;
  1. 通过映射表迁移EMP数据:
INSERT INTO NEW_EMP(emp_id, emp_name, dept_id)
SELECT emp.emp_id, emp.emp_name, mapping.new_dept_id
FROM EMP emp
JOIN DEPT_MAPPING mapping ON emp.dept_id = mapping.old_dept_id;

验证建议

迁移前先执行以下查询,确认关联结果与目标NEW_EMP数据一致:

SELECT emp.emp_id, emp.emp_name, new_dept.dept_id
FROM EMP emp
JOIN DEPT dept ON emp.dept_id = dept.dept_id
JOIN NEW_DEPT new_dept ON new_dept.dname = dept.dname || '_' || dept.dept_id;

内容的提问来源于stack exchange,提问作者smriti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:31:05