如何通过JOIN等方法将一个表的列数据添加到另一表对应列
跨表字段同步实现方案
需求背景
现有两张数据库表:
COPYCLAIMPRGNOTE:仅包含claim_id、NOTE_MEMO_CARETECH2个列COPYCLAIMPRGNOTE1:包含多个列,初始缺少NOTE_MEMO_CARETECH列,需要新增该列后,按claim_id匹配同步COPYCLAIMPRGNOTE表中对应的字段值
正确实现步骤
分两步执行即可:
- 先给
COPYCLAIMPRGNOTE1新增目标列,字段类型、长度、非空等属性要和COPYCLAIMPRGNOTE表中的NOTE_MEMO_CARETECH完全一致,示例SQL:-- 请将VARCHAR(2000)替换为源表对应字段的实际类型 ALTER TABLE COPYCLAIMPRGNOTE1 ADD NOTE_MEMO_CARETECH VARCHAR(2000); - 执行关联更新同步数据,根据你使用的数据库选对应语法即可:
- MySQL 写法
UPDATE COPYCLAIMPRGNOTE1 t1 INNER JOIN COPYCLAIMPRGNOTE t2 ON t1.CLAIM_ID = t2.CLAIM_ID SET t1.NOTE_MEMO_CARETECH = t2.NOTE_MEMO_CARETECH;- SQL Server/PostgreSQL 写法
UPDATE t1 SET t1.NOTE_MEMO_CARETECH = t2.NOTE_MEMO_CARETECH FROM COPYCLAIMPRGNOTE1 t1 INNER JOIN COPYCLAIMPRGNOTE t2 ON t1.CLAIM_ID = t2.CLAIM_ID;- Oracle 写法
UPDATE ( SELECT t1.NOTE_MEMO_CARETECH t1_val, t2.NOTE_MEMO_CARETECH t2_val FROM COPYCLAIMPRGNOTE1 t1 INNER JOIN COPYCLAIMPRGNOTE t2 ON t1.CLAIM_ID = t2.CLAIM_ID ) SET t1_val = t2_val;
你之前编写的SQL错误说明
- 第一段SQL错误:混淆了「插入新行」和「更新已有行字段值」的场景,你需要的是更新现有行的字段,不是插入新数据;且SELECT部分取值取的是目标表本身还不存在的空字段,定义了表别名
src却完全没使用,逻辑不成立。 - 第二段SQL错误:
INSERT ... VALUES语法不支持直接拼接JOIN关联,完全不符合SQL基础语法规范,同样混淆了插入和更新的使用场景。 - 第三段SQL错误:子查询只查了不存在的
NOTE_MEMO_CARETECH_OLD字段,没有查询源表的待同步字段;关联条件CLAIM_ID = CLAIM_ID没有加表别名限定,会产生字段歧义,数据库无法识别对应关系,执行必然报错。
提示:执行更新操作前建议先备份表数据,或开启事务先验证更新行数、结果符合预期后再提交,避免误改数据。
内容的提问来源于stack exchange,提问作者Suraj Ingle
相关产品推荐
相关产品推荐

