如何将Table1的Fruit_ID对应填充到Table2?
解决步骤
你的需求是先填充Table2的空Fruit_ID值,再建立外键约束——之前执行的ALTER TABLE添加外键语句是用来做数据约束的,不能自动填充已有空值,所以得按下面两步来:
1. 批量填充Table2的Fruit_ID
根据Fruit_Name匹配Table1,把对应Fruit_ID更新到Table2中。不同数据库的SQL写法略有差异,以下是常用版本:
MySQL/MariaDB 写法
UPDATE Table2 t2 JOIN Table1 t1 ON t2.Fruit_Name = t1.Fruit_Name SET t2.Fruit_ID = t1.Fruit_ID WHERE t2.Fruit_ID IS NULL; -- 仅更新未填充的空值行
SQL Server 写法
UPDATE t2 SET t2.Fruit_ID = t1.Fruit_ID FROM Table2 t2 INNER JOIN Table1 t1 ON t2.Fruit_Name = t1.Fruit_Name WHERE t2.Fruit_ID IS NULL;
执行完这条语句后,Table2中所有和Table1匹配Fruit_Name的行,都会自动填上对应的Fruit_ID。
2. 检查数据有效性并添加外键约束
填充完成后,先确认Table2中没有无效的Fruit_ID(即不在Table1中存在的值),可以执行这条查询排查:
SELECT t2.* FROM Table2 t2 LEFT JOIN Table1 t1 ON t2.Fruit_ID = t1.Fruit_ID WHERE t1.Fruit_ID IS NULL AND t2.Fruit_ID IS NOT NULL;
如果返回空结果,说明所有Fruit_ID都合法,此时再执行你之前的外键添加语句:
ALTER TABLE Table2 ADD FOREIGN KEY (Fruit_ID) REFERENCES Table1(Fruit_ID);
这样就能完成数据填充+约束建立的需求了。
内容的提问来源于stack exchange,提问作者Dom Anna
相关产品推荐
相关产品推荐

