zoukankan      html  css  js  c++  java
  • ORACLE多表级联更新( MERGE、UPDATE FROM JOIN替代语句)

    方法一:MERGE语句的语法

    MERGE INTO 表名 
    USING 表名/视图/子查询 ON 连接条件 --多个条件注意()括起来
    WHEN MATCHED THEN  -- 当匹配得上连接条件时
    更新、删除操作 
    WHEN NOT MATCHED THEN  -- 当匹配不上连接条件时 
    更新、删除、插入操作

    示例

    MERGE INTO CAI_GRKMX a USING TMP_IMPHD b
    ON (a.SPID=b.SPID AND a.PIHAO=b.PIHAO AND instr(b.pihao,a.djbh)>0)
    WHEN MATCHED THEN 
     UPDATE SET a.HDUID=b.MXUID,a.HDBZ=1;
    COMMIT;

     来自网上更好的说明

    MERGE INTO dept60_bonuses b
    USING (
               SELECT employee_id, salary, department_id
               FROM hr.employees
               WHERE department_id = 60
          ) e
    ON (b.employee_id = e.employee_id)
    -- 当符合关联条件时
    WHEN MATCHED THEN
         -- 将奖金为0的员工的奖金调整为其工资的20%
         UPDATE 
         SET b.bonus_amt = e.salary * 0.2
         WHERE b.bonus_amt = 0
         -- 删除工资大于7500的员工奖金记录
         DELETE 
         WHERE (e.salary > 7500)
    -- 当不符合连接条件时
    WHEN NOT MATCHED THEN
         -- 将不在部门为60号的,且不在dept60_bonuses表的用工信息插入,并将其奖金设置为其工资的10%
         INSERT 
         (b.employee_id, b.bonus_amt)
         VALUES 
         (e.employee_id, e.salary * 0.1)
         WHERE (e.salary < 7500)

    方法二:作为多表级联更新的另外一种写法

    UPDATE 
    (SELECT a.HDUID,b.MXUID,HDBZ 
    FROM CAI_GRKMX a
    INNER JOIN TMP_IMPHD b ON a.SPID=b.SPID AND a.PIHAO=b.PIHAO AND instr(b.pihao,a.djbh)>0
    ) 
    SET HDUID=MXUID,HDBZ=1 
  • 相关阅读:
    Python统计字符串中出现次数最多的人名
    初探CORBA组件化编程
    shell脚本—基础知识,变量
    Java多线程--线程交替
    Qt中采用多线程实现Socket编程
    Python字符串格式化--formate()的应用
    JAVA中浅复制与深复制
    Python这些问题你会吗?
    PHP控制反转(IOC)和依赖注入(DI
    Go 语言指针
  • 原文地址:https://www.cnblogs.com/sdlz/p/12690451.html
Copyright © 2011-2022 走看看