zoukankan      html  css  js  c++  java
  • 将一个表的字段更新到另一个表中去

    描述

    做一个需求需要记录用户留下签字意见时的职位信息,并且签字意见中留下的职位信息不随他的职位的调动变化而变化。在标准产品的签字意见表里面没有记录职位信息的字段,这就需要我们添加一个字段用于存储当前操作者的职位信息,对于新的数据我们可以在插入签字意见的时候一并插入。但是对于历史数据,我们就需要通过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用法总结

  • 相关阅读:
    删除表空间的时候遇到的问题:ORA-02429: 无法删除用于强制唯一/主键的索引
    删除
    Activity中使用getSystemService获得系统服务
    用多线程实现反应灵敏的界面(Java)
    用数组实现3个栈之固定分割(Java)
    Android小知识点20条
    Android数据库中数据文件的导出与查看
    MFC中使用CSplitterWnd分割窗口后设置视图大小的问题
    MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)
    6:Node.js 路由
  • 原文地址:https://www.cnblogs.com/ZiYangZhou/p/8185932.html
Copyright © 2011-2022 走看看