如何解决根据主键插入外键到表中
我试图将一个表拆分为两个表,并想将一个表的引用(外键)添加到另一个表中
例如,假设有一个名为 customer 表的表,其中一个名为 Group Name 的列具有不利于数据规范化的重复数据,因此我想拆分该列上的表,这将替换该组带有 GroupID 列的名称列
现在形成一个具有 2 列 GroupID 和 Group Name 的新表,并将不同的 Group 值插入到 GroupName 列中,并使用自动递增的 GroupID 作为组表中的主键,并在 Customer 表中引用以充当外键
现在的主要问题是如何将'GROUP TABLE'的那些Autoincremented GroupID插入客户表的groupID或如何根据主表将外键插入客户表
customerTable With GroupID 和 customerTable With Customer_Group 是两个不同的表
UPDATE ch03.customerd
JOIN ch03.group gr ON customer.Customer_Group = gr.Group_Name
SET customerd.Group_ID = gr.Group_id
WHERE customerd.Customer_id = customer.Customer_id;
update ch03.customerd set Group_ID =
(select gr.Group_id
from ch03.customer as co
join ch03.group as gr on co.Customer_Group = gr.Group_Name)
where customerd.Customer_id = customer.Customer_id;
这是我尝试过的,但没有用
解决方法
如果除 group_id
之外的所有数据都已传输,则
UPDATE new_customer_table nc
JOIN old_customer_table oc ON nc.customer_id = oc.customer_id
JOIN new_group_table ng ON oc.customer_group = ng.group_name
SET nc.group_id = ng.group_id
如果新表是空的,那么
INSERT INTO new_group_table (group_name)
SELECT DISTINCT customer_group
FROM old_customer_table;
INSERT INTO new_customer_table (customer_id,..,customer_age,group_id)
SELECT oc.customer_id,oc.customer_age,ng.group_id
FROM old_customer_table oc
JOIN new_group_table ng ON oc.customer_group = ng.group_name;
附注。如果旧表中的 customer_group
未定义为 ENUM / 没有检查输入值的有效性的 CHECK 约束,那么我建议先执行 INSERT INTO new_group_table ..
并仔细检查插入的值。如果发现一些印刷错误,那么您需要先编辑源数据,然后截断 new_group_table
并重复 - 直到所有组名都正确。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。