`

用oracle的merge实现mysql的replace into

 
阅读更多

mysql有一个replace into的dml语句,类似insert,但是会在insert之前检查表的唯一索引或主键。如果存在,就改为update操作。
这在很多应用中是一个很常用的操作。有了这个replace into ,就可以将一个 select后判断后做update or insert改为一句话,甚是方便。

 

 

Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和upda tes操作. MERGE命令从一个或多个数据源中选择行来updati ng或inserting到一个或多个表.在Oracle 10g中MERGE有如下一些改进:

1、UPDATE或INSERT子句是可选的

2、UPDATE和INSERT子句可以加WHERE子句

3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表

4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行

5、源表就是using关键字后面跟的表,目标表就是将要被merge into的表

6、merge into 中所有的update、insert、delete都是针对目标表来操作的。由于merge into已经制定了操作的表,所以update、insert、delete都不需要再显示指出表名

 

作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;

语法:

 

MERGE INTO [your table-name] [rename your table here]

USING ( [write your query here] )[rename your query-sql and using just like a table]

ON ([conditional expression here] AND [...]...)

WHEN MATHED THEN [here you can execute some update sql or something else ]

WHEN NOT MATHED THEN [execute something else here ! ]
 

 

oracle9以后(好像)有了merge into,也可以实现类似功能,sql demo如下

    merge into qq a
    using (select '2022' company_no, 'cname' company_name from qq where rownum<2) b
    on (a.company_no = b.company_no)
    WHEN MATCHED THEN
      UPDATE SET a.company_name = a.company_name|| 'a'
    WHEN NOT MATCHED THEN
      INSERT
        (a.company_no, a.company_name)
      VALUES
        (b.company_no, b.company_name);
分享到:
评论

相关推荐

    mysql面试题,涉及MySQL基础、MySQL索引、MySQL语句 MySQL进阶等方面,适用于初、中级开发人员

    MySQL 中没有类似 Oracle 的 merge 语句,但是可以使用两种方法来实现类似的功能:INSERT INTO … ON DUPLICATE KEY UPDATE 和 REPLACE INTO。前者使用 INSERT 语句向表中插入记录,如果发现主键或唯一键冲突,则...

    MySQL and JSON A Practical Programming Guide 2018

    Written by a MySQL Community Manager for Oracle, MySQL and JSON: A Practical Programming Guide shows how to quickly get started using JSON with MySQL and clearly explains the latest tools and ...

    数据库常见操作语句小结

    同时,也要注意了解不同数据库系统之间的差异,如本文提到的ON DUPLICATE KEY UPDATE是MySQL特有的语法,在Oracle中需要使用其他语法结构来实现类似的功能。 总结以上,数据库操作是信息处理中不可或缺的一部分,...

    阿里数据库团队PostgreSQL实践.pptx

    5. **Merge Into操作**:PostgreSQL中没有Oracle的`Merge Into`语句,但可以通过`with`查询,`update returning`和`insert`的组合来实现类似功能。 通过这个实践过程,阿里巴巴数据库团队成功地将Oracle系统迁移到...

    oracle基础知识

    ALTER TABLE table_name MERGE PARTITIONS p1, p2 INTO PARTITION p_merged; ``` ##### 14.9 拆分分区 将一个分区拆分为两个或多个分区: ```sql ALTER TABLE table_name SPLIT PARTITION p1 AT (TO_DATE('2024-01...

    阿里数据库团队PostgreSQL实践.ppt

    5. MERGE INTO语句的改造:在PostgreSQL中,需使用with子句、update returning及insert来实现类似的功能。 通过这些实践,阿里数据库团队成功地将Oracle替换为PostgreSQL,降低了运维成本,提高了系统的自主可控性...

Global site tag (gtag.js) - Google Analytics