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 MATCHED THEN [here you can execute some update sql or some…
下面的两个SQL是等价的,但是一个执行N小时都执行不完,一个花了一分钟. 执行计划显示第一个语句是由外面的即将被更新的表驱动内层,相对于是一个NEST LOOP,cost非常大.第二个语句是内层单独执行完后,与外面的筛选结果做一个HASH JOIN, cost降低了很多. UPDATE GPCOMP1.GPRECL R SET (PROMISED_BY,PROMISED_DATE)=(SELECT W.USER_ID,W.CREATED_ON FROM (SELECT T.*,ROWNUM FR…
2015-05-21 Created By BaoXinjian 一.摘要 以前只考虑 merge into 只是在特定场合下方便才使用的,今天才发现,merge into 竟然会比 update 在更新数据时有这么大的改进. 其实呢,merge into部分的update和update也没啥不同的,不同的地方在于使用merge into后执行计划变了. merge方法是最简洁,效率最高的方式,在大数据量更新时优先使用这种方式. 1. 基本语法 merge into test1 using te…
转自:http://blog.itpub.net/25322446/viewspace-767505 说明:笔记总结了在工作中遇到过的几种update方法和各种方法适用的范围. 1.单表更新方案:使用标准update语法即可,执行稳定且效率较高update tableset (column1,column2,...)=value1,value2,...; 2.多表关联更新举例:更新gkfq_rec表中所有slid与oa2_ftask表fi_inst相同的行,blzt字段值=oa2_ftask表的…
INSERT INTO newest_log_operation(    ACTION, OPERATION, KEY_VALUE, BUS_KEY, CONTENT, USER_ID, VERSION, MODULE,CREATE_TIME)   VALUES (:action, :operation, :keyValue, :busKey, :content, :userId, 1, :module,now())   ON DUPLICATE KEY UPDATE    ACTION = V…
MERGE INTO RDP_CHARTS_SETTING T1 USING (SELECT '10001' AS PAGE_ID, 'test' AS CHART_OPTION FROM DUAL) T2 ON (T1.PAGE_ID = T2.PAGE_ID) WHEN MATCHED THEN UPDATE SET T1.CHART_OPTION = T2.CHART_OPTION WHEN NOT MATCHED THEN INSERT (T1.PAGE_ID, T1.CHART_OPT…
报错:Oracle ORA-01722: 无效数字 看了一篇博客,据说是参数与列名不能一致,改过之后还是报一样的错误:Oracle ORA-01722: 无效数字 ,后来试了一下,不是参数名必须不一样的原因. 然后把参数的语句变换了一些,按照参数的正确顺序排好之后,一切正常.…
项目用的ORM框架是用springdatajpa来做的,有些批量数据操作的话,用这个效率太低,所以用mybatis自己写sql优化一下. 一般情况,我们肯定是先查询,有就修改,没有就添加,这样的话,单个操作还好,如果是大量数据的话,每次都需要先查后改(如果用springdatajpa的话,添加之前还得查一遍),太消耗资源了. 那么mysql有没有解决的办法呢?当然是有的,我查了一些资料,有两种办法,一种是使用使用replace into ,还有一种是on duplicate key update…
首先我们新建一张名为XIHONGSHISHOUFU的表,这张表是评委会初步评选出的西虹市首富的候选人员,下面的SQL语句包含建表和插入数据的部分: CREATE TABLE XIHONGSHISHOUFU ( REGION_ID INTEGER, NAME VARCHAR(20), MONEY DECIMAL(20,2), AGE INTEGER ); INSERT INTO XIHONGSHISHOUFU VALUES (101,'小明',100.00,30), (102,'小王',200.0…
merge是oracle特有的语句,两表关联操作(增.删.改)就效率非常高 merge into table_name alias1 using (table|view|sub_query) alias2 on (join condition) when matched then update table_name set col1 = col_val1, col2 = col2_val when not matched then insert ( column_list ) values (…