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

如何将T1数据表拆分至Person表(T2)与PersonClientLink表(T3)

数据库表拆分实操步骤

表结构说明

T1 - 当前数据表

IDClient_IdName
15Bob
26Bob
37Greg
48Greg

T2 - 目标Person表(需生成)

IDName
1Bob
2Greg

T3 - 目标PersonClientLink表(需填充)

IDPerson_IdClient_Id
115
216
327
428

具体操作步骤

  • 第一步:生成Person表(T2)
    从T1中提取去重的人员数据插入到T2。如果T2的ID是自增主键,用以下SQL:

    INSERT INTO T2 (Name)
    SELECT DISTINCT Name FROM T1;
    

    要是需要手动按规则生成ID(比如按姓名排序),可以用窗口函数(以MySQL为例):

    INSERT INTO T2 (ID, Name)
    SELECT DENSE_RANK() OVER(ORDER BY Name) AS ID, Name
    FROM T1
    GROUP BY Name;
    
  • 第二步:填充PersonClientLink表(T3)
    关联T1和T2,把人员与客户的对应关系插入T3。若T3的ID是自增主键:

    INSERT INTO T3 (Person_Id, Client_Id)
    SELECT t2.ID, t1.Client_Id
    FROM T1
    JOIN T2 ON t1.Name = t2.Name;
    

    手动生成T3的ID则用:

    INSERT INTO T3 (ID, Person_Id, Client_Id)
    SELECT 
      ROW_NUMBER() OVER(ORDER BY t2.ID, t1.Client_Id) AS ID,
      t2.ID AS Person_Id,
      t1.Client_Id
    FROM T1
    JOIN T2 ON t1.Name = t2.Name;
    
  • 第三步:将T1改造为T2
    先备份原表防止数据丢失:

    CREATE TABLE T1_backup AS SELECT * FROM T1;
    

    再删除原T1,把T2重命名为T1:

    DROP TABLE T1;
    ALTER TABLE T2 RENAME TO T1;
    

注意事项

  • 操作前必须备份所有数据,避免误操作导致数据丢失
  • 如果存在同名不同人的情况,需要额外的区分字段,否则会错误合并数据
  • 不同数据库的语法略有差异(比如窗口函数支持、自增字段写法),需根据你的数据库类型(MySQL、PostgreSQL、SQL Server等)调整SQL语句

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:20:43