博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL2008中Merge的用法
阅读量:6874 次
发布时间:2019-06-26

本文共 1195 字,大约阅读时间需要 3 分钟。

在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已。下面就是具体的使用说明:

首先是对merge的使用说明:

merge
[
into
]
[
目标表
]
using
<
源表
>
on
条件  --这个条件一般指对目标表的限制,如果想对原表限制,请<源表>中使用子查询和条件
when
matched 操作
when
not
matched 操作;

首先,请参看两张表 TableThis和TableThat:

可以看到,这两张表中的内容还是比较简单的,两张表通过一个tbThisID进行主键和外键的关联,那么如如果想实现二者之间的数据同步,该如何进行呢,请看具体的Merge代码:

merge
into
TableThat
as
a
using TableThis
as
b
on
a.tbThisID
=
b.tbThisID
when
matched
then
update
set
a.tbContent
=
a.tbContent
+
'
-
'
+
b.tbThisPhone
when
not
matched
then
insert
(tbThisID,tbContent)
values
(b.tbThisID,b.tbThisPhone);

 这样  就可以将两个表中间的数据进行同步并且进行更新,确实很方便,最终得到结果为:

但是如果想让匹配的数据删除掉,并且如果子表中没有数据就插入,这个该如何用呢,当然得涉及到delete的操作了:

merge
into
TableThat
as
a
using TableThis
as
b
on
a.tbThisID
=
b.tbThisID
when
matched
then
delete
when
not
matched
then
insert
(tbThisID,tbContent)
values
(b.tbThisID,b.tbThisPhone);

这样得到的结果为:

希望有用。

另外,如果想对源表进行筛选,也是可以的,在原表处使用括号和子查询,例如:

merge into TableThat as a using (select * from TableThis where tbThisID=5) as bon a.tbThisID = b.tbThisIDwhen matched thendeletewhennot matched then insert (tbThisID,tbContent)values(b.tbThisID,b.tbThisPhone);

这样就可以先从源头控制了。

 

出处:https://www.cnblogs.com/scy251147/archive/2011/05/30/2063672.html

你可能感兴趣的文章
进度条
查看>>
5.9 j(java学习笔记)强软弱虚引用及WeakHashMap、IdentityHashMap、EnumMap
查看>>
移动Web开发经验
查看>>
苹果Itools
查看>>
Windows 2003/2008更改远程桌面端口脚本
查看>>
Mozilla开发新功能提升网络隐私保护
查看>>
运营是一门艺术,互联网营销
查看>>
Visual Studio 2010 SP1将支持HTML5和CSS3
查看>>
[资源记录 ]mobile layer cdn
查看>>
关于scrapy的piplines
查看>>
内核同步机制
查看>>
用 Tornado 实现简单的在线代理
查看>>
Java写到.txt文件,如何实现换行
查看>>
JavaScript之isNaN()函数讲解
查看>>
MPlayer源代码分析
查看>>
获取音视频文件AVMetadata数据
查看>>
sql serve 创建序列
查看>>
模型层的生成
查看>>
关于APP接口设计
查看>>
【VI】如何再执行上一个(历史)命令(已解决)
查看>>