zoukankan      html  css  js  c++  java
  • oracle:MERGE语句

    将源表添加到目标表,如果目标表中行已经存在,可以更新数据,如果不存在,可以插入数据。

    之所以说可以,因为更新、插入操作都是要自己写的。 - -!

    9i 时必须update insert 都有,10g以后至少有一个

    MERGE INTO target_table_name tar_t
    USING source_table_name sou_t ON
    (expr1)
    WHEN MATCHED THEN
    expr2
    WHEN NOT MATCHED THEN
    expr3;

    (这只是一条sql 语句 - -!)

    expr1 为判断语句,例如 tar_t.id = sou_t.id
    expr2 为目标行存在的操作, 例如 UPDATE SET xxxx [WHERE xxx]  [DELETE WHERE (xxx)]

    expr3 为不存在时的操作,例如INSERT VALUES (xxxx) [WHERE xxx] 

    WHEN 语句只写一个,那么另外的那个将被忽略

    expr1时可以对UPDATE加WHERE 操作,控制部分更新

    UPDATE
    SET expr1
    WHERE xxx

    where 操作只能在满足 ON 条件的数据下再一次选择
    DELETE 语句只能删除 目标表的行,就算是特意指明是源表,也会删除目标表

    而且DELETE语句一定在 WHERE 后面(如果存在),就是上面expr2 的格式

    需要注意的是在UPDATE时出现多组源表数据对应目标表中的一行数据(这种情况可以通过primary key 解决)

    如果expr1 中有空值做判断,不会跳入 MATCHED 和 NOT MATCHED

    MERGE 可以做很多UPDATE 的操作

  • 相关阅读:
    CF1175B Catch Overflow!
    震惊!一蒟蒻竟然写出fhqTreap
    树上差分
    洛谷 P3128 最大流Max Flow
    线段树的标记永久化/二维线段树模板
    矩阵加速~desire drive
    置换相关
    树形图们
    严格单调递增与非严格之间的转换
    记录延续性的一类dp
  • 原文地址:https://www.cnblogs.com/Azhu/p/2439861.html
Copyright © 2011-2022 走看看