zoukankan      html  css  js  c++  java
  • 【SQL】MERGE

    MERGE可以合并多个表中的数据,也可实现多表中数据的同步。使用MERGE语句对表中数据进行有条件的更新和插入。当查找的行存在时,UPDATE更新行中的数据;当查找的行不存在时,INSERT插入数据。

    语法如下:

    MERGE INTO table_name table_alias

    USING (table|view|sub_query) alias

    ON (join condition)

    WHEN MATCHED THEN

    UPDATE SET

    col1=col_val1,

    col2=col_val2

    WHEN NOT MATCHED THEN

    INSERT (column_list)

    VALUES (column_values);

    语法解析:

    MERGE INTO后跟要更新或者插入数据的目标表;

    USING后跟源表;

    ON后跟连接条件;

    例如:同步dept表中数据到dept_1中

    SQL> merge into dept_1 d1

      2  using dept d

      3  on (d.deptno=d1.deptno)

      4  when matched then

      5     update set  d1.dname = d.dname, d1.loc = d.loc

      6  when not matched then

      7     insert values (d.deptno, d.dname, d.loc);

     

    4 rows merged.

    注意:ON后面作为连接条件的列不必再从SET后出现,即不能更新作为条件的列。否则会报如下错误:

    SQL> merge into dept_1 d1

      2  using dept d

      3  on (d.deptno=d1.deptno)

      4  when matched then

      5     update set d1.deptno = d.deptno, d1.dname = d.dname, d1.loc = d.loc

      6  when not matched then

      7     insert values (d.deptno, d.dname, d.loc);

    on (d.deptno=d1.deptno)

                 *

    ERROR at line 3:

    ORA-38104: Columns referenced in the ON Clause cannot be updated: "D1"."DEPTNO"

  • 相关阅读:
    Java中break和continue跳出指定循环
    Linux命令对应英文全称
    linux 使用 rz 和 sz 命令
    linux tail命令的使用方法详解
    Linux常用命令大全(非常全!!!)
    正则 函数
    行级锁 java||数据库
    mysql插入操作跳过(ignore)、覆盖(replace into)、更新(on duplicate key)
    MYSQL 常用【函数】大全
    MySQL中INFORMATION_SCHEMA
  • 原文地址:https://www.cnblogs.com/NextAction/p/7366627.html
Copyright © 2011-2022 走看看