SQL如何根据同列匹配值从另一张表插入同步对应字段数据
问题说明
两张结构相似的表均包含name和regis字段:
- table1:
name、regis字段均已填充完整数据 - table2:仅录入了
name字段值,regis字段为空
需求是按照name字段值相等的匹配规则,把table1的regis值同步到table2对应行。
此前尝试的SQL未生效,写法如下:
INSERT INTO table2 (regis) SELECT table1 (regis) WHERE table2.name = table1.name
原语句问题
- 逻辑用错:
INSERT作用是新增表行,当前需求是给table2已存在的行补填字段值,应该用UPDATE做关联更新,而非插入新数据 - 语法错误:读取表字段的正确写法是
表名.字段名,table1 (regis)的写法不符合SQL语法规范 - 关联缺失:语句没有声明两表的关联关系,数据库无法识别匹配逻辑
正确实现方案
不同数据库的关联更新语法有差异,对应常用写法如下:
MySQL/PostgreSQL
UPDATE table2 INNER JOIN table1 ON table2.name = table1.name SET table2.regis = table1.regis;
SQLite
UPDATE table2 SET regis = ( SELECT regis FROM table1 WHERE table1.name = table2.name );
SQL Server
UPDATE t2 SET t2.regis = t1.regis FROM table2 t2 INNER JOIN table1 t1 ON t2.name = t1.name;
执行更新操作前建议先做校验:可以先执行匹配查询语句
SELECT t2.name, t1.regis AS target_value FROM table2 t2 JOIN table1 t1 ON t2.name = t1.name,确认匹配到的行、对应要更新的regis值符合预期后再执行更新,避免误操作。有条件的话提前备份表数据更稳妥。
内容的提问来源于stack exchange,提问作者matt2k12
相关产品推荐
相关产品推荐

