将一个表的字段更新到另一个表中去

Posted Oh,L.E.D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将一个表的字段更新到另一个表中去相关的知识,希望对你有一定的参考价值。

描述

做一个需求需要记录用户留下签字意见时的职位信息,并且签字意见中留下的职位信息不随他的职位的调动变化而变化。在标准产品的签字意见表里面没有记录职位信息的字段,这就需要我们添加一个字段用于存储当前操作者的职位信息,对于新的数据我们可以在插入签字意见的时候一并插入。但是对于历史数据,我们就需要通过SQL来更新,这样在升级客户系统的时候直接运行一个SQL脚本就将历史数据的职位字段更新为记录的操作者当前的职位信息。
假设表HRM表示用户表,结构如下:

字段名字 类型 备注
ID NUMBER 用户id
NAME VARCHAR2 用户名字
DEPT NUMBER 部门id

签字意见表LOG,结构如下:

字段名字 类型 备注
ID NUMBER 签字意见id
USERID NUMBER 用户id
DEPT NUMBER 部门id
LOG VARCHAR2 签字意见内容

数据库使用的是oracle11g,测试表创建脚本:

CREATE TABLE HRM (
  ID NUMBER NOT NULL ,
  NAME VARCHAR2(255 BYTE) ,
  DEPT NUMBER
)

CREATE TABLE LOG (
  ID NUMBER NOT NULL ,
  USERID NUMBER ,
  DEPT NUMBER ,
  LOG VARCHAR2(255 BYTE)
)

INSERT INTO "HRM"("ID", "NAME", "DEPT") VALUES (\'1\', \'zx\', \'22\');
INSERT INTO "HRM"("ID", "NAME", "DEPT") VALUES (\'2\', \'wj\', \'22\');
INSERT INTO "HRM"("ID", "NAME", "DEPT") VALUES (\'3\', \'lk\', \'33\');
INSERT INTO "HRM"("ID", "NAME", "DEPT") VALUES (\'4\', \'po\', \'44\');
INSERT INTO "HRM"("ID", "NAME", "DEPT") VALUES (\'5\', \'mm\', \'55\');
INSERT INTO "HRM"("ID", "NAME", "DEPT") VALUES (\'6\', \'jz\', \'66\');
INSERT INTO "HRM"("ID", "NAME", "DEPT") VALUES (\'7\', \'ui\', \'77\');

INSERT INTO "LOG"("ID", "USERID", "DEPT", "LOG") VALUES (\'1\', \'1\', NULL, \'xx\');
INSERT INTO "LOG"("ID", "USERID", "DEPT", "LOG") VALUES (\'2\', \'1\', NULL, \'xxx\');
INSERT INTO "LOG"("ID", "USERID", "DEPT", "LOG") VALUES (\'3\', \'2\', NULL, \'sss\');
INSERT INTO "LOG"("ID", "USERID", "DEPT", "LOG") VALUES (\'5\', \'3\', NULL, \'ss\');
INSERT INTO "LOG"("ID", "USERID", "DEPT", "LOG") VALUES (\'6\', \'3\', NULL, \'ss\');
INSERT INTO "LOG"("ID", "USERID", "DEPT", "LOG") VALUES (\'7\', \'4\', NULL, \'sss\');


者两个表之间通过HRM表的ID和LOG表的USERID进行关联,现在需要将LOG表的历史记录中的DEPT字段更新为他的userid对应的HRM表的DEPT字段的值。方法如下所示。

方法一

update LOG SET (dept) = (select dept from HRM where id = LOG.userid)

方法二

merge into LOG using HRM on (LOG.USERID = HRM.ID)
when matched
then update set LOG.DEPT = HRM.DEPT

参考

1.oracle怎么用一个表的多个字段数据更新另一个表相应的字段中
2.Oracle中Merge into用法总结

以上是关于将一个表的字段更新到另一个表中去的主要内容,如果未能解决你的问题,请参考以下文章

在SQL中统计一个字段 然后再更新到另一张表的一个字段

Oracle 将一个表中几个字段更新到另一个表中

SQL语句把同一个表中的a字段中的数据复制到另一个字段b中

SQL SERVER中,如何把一个表中的数据导入到另一个表中?

EF怎样只更新表的部分字段

如何将一个数据库中的一个表复制到另一个数据库中去