如何编写SQL通过关联ID查询关联表数据并批量更新父表指定字段
关联更新Form表Owner_username字段解决方案
你现有查询的关联条件存在错误:你写的Form.id = U.id不符合你的表结构关联逻辑,正确的关联条件应该是Form.Owner_id = User.User_id。
不同数据库的更新语句
不需要手动遍历行,直接执行对应数据库的关联UPDATE语句即可完成全量字段填充:
MySQL
UPDATE Form f LEFT JOIN User u ON f.Owner_id = u.User_id SET f.Owner_username = u.username;
PostgreSQL
UPDATE Form f SET Owner_username = u.username FROM "User" u WHERE f.Owner_id = u.User_id;
SQL Server
UPDATE f SET f.Owner_username = u.username FROM Form f LEFT JOIN "User" u ON f.Owner_id = u.User_id;
注意事项
- 执行更新前建议先运行查询验证匹配结果是否正确,避免关联条件写错导致数据异常:
SELECT f.Form_id, f.Owner_id, u.username, f.Owner_username FROM Form f LEFT JOIN User u ON f.Owner_id = u.User_id; - 数据量较大时建议先备份Form表再执行更新操作。
- 该操作完成后,Form表存储的Owner_username为当前时间点的用户账号快照,后续User表的用户信息变更不会影响历史Form数据,完全匹配你需要保留特定时间点用户信息的业务需求。
内容的提问来源于stack exchange,提问作者mrJay
相关产品推荐
相关产品推荐

