oracle中的merge into用法解析

oracle中的merge into用法解析
merge into的形式
  MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)
  WHEN MATCHED THEN
   [UPDATE sql]
  WHEN NOT MATCHED THEN
   [INSERT sql]
作用:判断B表和A表是否满足on条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表,但有很多可选项。
例如:
  1:正常模式
  2:只update或者只insert
  3:带条件的update或带条件的insert
  4:全插入insert实现
  5:带delete的update -------------------不做讲解
一:正常模式
  例如:
  MERGE INTO A_MERGE A
  USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
  ON (A.id=C.AID)
  WHEN MATCHED THEN
   UPDATE SET A.YEAR=C.YEAR
  WHEN NOT MATCHED THEN 
  INSERT(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
  commit;
解析:
  1:被更新的表写在MEGER INTO之后
  2:更新来源数据表写在USING之后,并将相关字段查询出来,为查询结果定义别名
  3:ON之后表示更新满足的条件
  4:WHEN MATCHED THEN:表示当满足条件时要执行的操作。
  5:UPDATE SET 被更新表.被更新字段 = 更新表.更新字段---此更新语句不同于常规更新语句
  6:WHEN NOT MATCHED THEN:表示当不满足条件时要执行的操作。
  7:INSERT (被更新表.被更新字段,...)  VALUES(更新表.更新字段,...)。
  8:commit:表示提交事务
二:只update或只insert
-------------------------------只更新--------------------------------------------------------
merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
  ON(A.ID=C.AID)
  WHEN MATCHED THEN
  UPDATE SET A.YEAR=C.YEAR;
  commit;
                                                                                                                   
  解析---只更新模式:
  1:将正常模式下的插入语句去除。
  2:使用WHEN MATCHED THEN,当满足条件的情况。
-------------------------------只插入--------------------------------------------------------
  merge into A_MERGE A
  USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
  ON(A.ID=C.AID)
  WHEN NOT MATCHED THEN 
  insert(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
  commit;
  解析---只插入模式:
  1:将正常模式下的更新操作去除
  2:使用WHEN NOT MATCHED THEN,当不满足ON条件时执行插入操作。
三:带where条件的update和insert
  我们在on中进行条件匹配之后,还可以在后面的insert和update中对on删选出来的记录再做一次条件判断,用来控制
  那些需要更新,那些需要插入。
  merge into A_MERGE A
  USING (select B.AID,B.name,B.year,B.city from B_MERGE B) C
  ON(A.id=C.AID)
  when matched then
  update SET A.name=C.name where C.city != '江西'
  when not matched then 
  insert(A.ID,A.name,A.year) values(c.AID,C.name,C.year) where C.city='江西';
  commit;
解析:
  1:当满足on条件并且满足where条件才会执行更新操作。
  2:当不满足on条件但是满足where条件才会执行插入操作。
四:无条件的insert
  有时候我们需要将一张表的所有的数据插入到另一张表中,此时就可以添加常量过滤谓词来实现,让其只满足匹配和不匹配,
  这样就只有update或insert操作了。
  merge into C_MERGE C
  USING (select B.AID,B.NAME,B.City from B_MERGE B) C
  ON (1=0)
  when not matched then
  insert(C.ID,C.NAME,C.City) values(B.AID,B.NAME,B.City);
  commit;
解析:
  on条件处于永远不匹配的条件,此时就会执行全表插入操作。

转载于:https://www.cnblogs.com/zja001/p/10145194.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《统一沟通-微软-实战》-3-部署-Exchange 2010-1-先决条件

参照: http://technet.microsoft.com/zh-CN/library/bb691354.aspx 先决条件 加域请确保林的功能级别至少为 Windows Server 2003,并确保架构主机运行 Windows Server 2003 Service Pack 1 或更高版本。有关 Windows 功能级别的详细信息,请参阅管理域和林…

写给打工人的职业发展观

转发火哥的一篇文章为什么要去一线城市打工现在网上很多这样的话题:深圳的高房价会导致人才流失吗?年轻人是不是在逃离北上广?一线城市工资是老家省会的一倍,消费,房租也比老家省会贵一倍,赚多少花多少&…

C++中string.find()的误用

下面的结果是什么&#xff1f; #include <iostream> #include <string> using namespace std; int main() { string s "abc"; if(s.find("x")) { cout << "yes" << endl; …

在线MSN代码(如同QQ在线咨询那种的)

在你需要显示MSN咨询的地方添加如下代码&#xff1a; <!--Msn网页在线代码开始--><a href"msnim:chat?contactabcdwxc21com.com"><img height"40"alt"msn:abcdwxc21com.com"src"msn.GIF"width"26"align&quo…

学习批处理之安装一键装机必备软件

经常装机需要装一些常备软件&#xff0c;麻烦而又无聊&#xff0c;就写个批处理&#xff0c;权当练练手。环境是批处理和常备软件包在一个文件内&#xff0c;直接copy文件夹到客户机&#xff0c;点击批处理执行即可。缺陷是常备软件非绿化版&#xff0c;启动安装时还得点“下一…

结构化操作语义

结构化操作语义 50年代是计算机语言兴起的年代&#xff0c;这一阶段的早期&#xff0c;计算机语言的设计往往要强调其"方便"的一面&#xff0c;而比较忽略其"严格"的一面&#xff0c;因而对语言的语义&#xff0c;甚至语法&#xff0c;未下严格的定义&…

RISC-V Linux 启动流程分析

“Author: 通天塔 985400330qq.comDate: 2022/05/15Revisor: lzufalcon falcontinylab.orgProject: RISC-V Linux 内核剖析”说明&#xff1a;RISC-V Linux 内核兴趣小组旨在围绕 RISC-V 处理器架构系统地研究 Linux 内核以及上下栈中的技术&#xff0c;为国内 RISC-V 生态…

两个栈来实现一个队列的C++代码

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/46765343 利用两个栈来实现一个队列&#xff0c; 这个问题很常见。 最关键的是要有好的思路&#xff0c; 至于实现&#xff0c; 那是很简单的事情了。 在本文中&#xff0c; 也想说说自己的思路&#xff0c; 但…

解读设计模式----单例模式(Singleton Pattern)

单例模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点.在程序设计中,有很多情况需要确保一个类只能有一个实例.从这句话可以看出,Singleton模式的核心&#xff1a;如何控制用户使用new对一个类的实例构造器的任意调用。如何绕过常规的构造器&#xff0c;提供一…

网站开发的小知识参考(慢慢收集备用)

inetinfo.exe占用80端口的解决方法 我在本机配置PHP环境时&#xff0c;安装的时候遇到80端口被占用&#xff0c;经过查询才知道&#xff0c;原来是Inetinfo.exe占用了80端口&#xff0c;于是把Inetinfo.exe服务关掉就可以正常安装PHP环境了。解决方法在windows服务管理里&#…

Linux下如何搭建Java环境

软件环境 虚拟机&#xff1a;VMware Workstation系统&#xff1a;Linux&#xff1a;CentOS-7-x86_64工具&#xff1a; 安装工具&#xff1a;SSH客户端搭建步骤 1&#xff1a;查询当前系统版本 cat /proc/version2&#xff1a;首先确认当前系统是否已经存在java环境 java -vers…

程序中提升几毫秒、节省几 kB 的内存有必要吗?

我记得我上小学的时候有一篇课文&#xff0c;说是有一个人很节省&#xff0c;不仅他自己家里节省&#xff0c;如果别人家吃饭乱扔的剩饭&#xff0c;他都会去收拾起来晒干存起来。然后刚好有一年饥荒&#xff0c;大家都没有米吃了&#xff0c;他就把他那些年存起来的米给大家吃…

pthread_join()函数理解

pthread_t tid; 使用方式&#xff1a;pthread_join(tid,NULL); 为什么要使用pthread_join()&#xff1f; 在很多情况下&#xff0c;主线程生成并起动了子线程&#xff0c;如果子线程里要进行大量的耗时的运算&#xff0c;主线程往往将于子线程之前结束&#xff0c; 但是如果主…

SmartTemplate学习入门一

php最简单的模板 Array的变量是由SmartTemplate内建函数assign&#xff08;&#xff09;来赋值的 具体语法如下 assign ( 模版中的变量, 要替换的内容 ) 或 assign ( Array内容 ) 和其他程序的变量一样&#xff0c;smartTemplate的变量是由特殊的{}所包含的。里面的内容可以是S…

人生感言

马云说的一些话&#xff0c;还是值得思考的&#xff1a; (1)、细节好的人格局一般比较差 (2)、态度比能力重要&#xff0c;选择同样也比能力重要 (3)、领导比员工多什么&#xff1f; 领导永远不要跟下属比技能&#xff0c;下属肯定比你强&#xff1b;如果不比你强&#x…

当MCU死机了,先把硬件抓过来~

关于软件开发中的偶发性问题&#xff0c;有些处理办法看似不是很难&#xff0c;但其实最重要的还是对问题的敏感度&#xff0c;而这份敏感度就来源于你对整个系统的理解和把握。当你能够尽快缩小问题代码的范围&#xff0c;在一定程度上就已经加快了解决问题的进度。之前我曾提…

青蛙学Linux—NFS

NFS&#xff0c;Network File Syttem&#xff0c;网络文件系统。它允许网络上运行不同操作系统的主机通过网络连接到运行NFS服务的主机上&#xff0c;以实现数据共享。NFS的配置非常简单&#xff0c;经过简单的设置既能快速使用NFS。 使用NFS&#xff0c;首先在服务端运行NFS服…

extjs 学习中

首先找了个js得开发工具&#xff1a;Komodo Edit 但是安装了好多次都没有出现提示&#xff0c;均告失败&#xff01;今天再次鼓起勇气安装试试&#xff1a;首先安装Komodo-Edit-4.3.2-1263; 成功&#xff01;然后&#xff1a; 下载extjs_api_catalogs-2.0.2-ko.xpi &#xff…

火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/51040218#cpp 看看如下代码的一个非常隐晦的错误&#xff0c; 虽然不会每次core dump, 但类似代码迟早会core dump&#xff0c; 好多人遇到过。 此问题极难定位&#xff0c; 看一下吧&#xff1a; [cpp] view pl…

P1648 看守

传送门 以二维的两个点\((x1,y1),(x2,y2)\)为例&#xff0c;那么他们之间的曼哈顿距离肯定为一下四个之一\((x1-x2)(y1-y2)\),\((x2-x1)(y1-y2)\),\((x1-x2)(y2-y1)\),\((x2-x1)(y2-y1)\)&#xff0c;而且为这四个里面最大的 然后搞一搞可以变成下面的样子\((x1y1)-(x2y2)\),\(…