使用merge语句可以从一个或多个源中选择要满足条件的行更新或插入到表或试图中,你可以指定条件来确定是更新还是插入到目标表或视图中。
该语句是组合多个操作的方便方法,效率也更高。使得你避免使用多个INSERT、UPDATE和DELETE语句。
特别要注意:MERGE是一个确定性语句。不能在同一个MERGE语句中多次更新目标表的同一行(除非多次更新结果一致)。不然会直接报错。通俗的解释就是:假如源表中的多条记录导致会去目标表中更新同一行,但是会更新出两个不同的结果则会报错,更新得到同一个结果则不报错(这也是确定性的意思)。

1. 语法

MERGE [ hint ]
   INTO [ schema. ] { table | view } [ t_alias ]
   USING { [ schema. ] { table | view }
         | subquery 
         } [ t_alias ]
   ON ( condition )
   [ merge_update_clause ]
   [ merge_insert_clause ]
   [ error_logging_clause ] ;
merge_update_clause写法:
WHEN MATCHED THEN
UPDATE SET column = { expr | DEFAULT }
           [, column = { expr | DEFAULT } ]...
[ where_clause ]
[ DELETE where_clause ]
merge_insert_clause写法:
WHEN NOT MATCHED THEN
INSERT [ (column [, column ]...) ]
VALUES ({ expr | DEFAULT }
          [, { expr | DEFAULT } ]...
[ where_clause ]
where_clause写法:
WHERE condition

语法解析:
INTO子句
使用INTO子句指定要更新或

1. Merge (MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构、索引),并且子表的存储引擎必须是Myisam。 3.合并表的创建方法
MERGE INTO [target-table] T USING [source-table sql ] S ON([conditional expression] and [...]...) WHEN MATCHED THEN [UPDATE sql ] WHEN NOT MATCHED THEN [INSERT sql ] 判断源表 S 和目标表 T 是否满足 ON 中的条件,如果满足则用 S 表去更新 T 表,如果不满足,则将 S 表数据插入
merge into 是英文的一个短语,意思是汇入,合并。顾名思义, merge into 是合并了insert和update操作,其执行效率要高于分别单独执行insert和update语句。 //创建表 create table YLB_TEST_001 NUMBER, NAME VARCHAR2(20) create table YLB_TEST_00...