zoukankan      html  css  js  c++  java
  • SQL2008中Merge的用法

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

    首先是对merge的使用说明:

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

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

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

    复制代码
    merge into TableThat as a
    using TableThis
    as b
    on a.tbThisID = b.tbThisID
    when matched then
    updateset a.tbContent=a.tbContent+'-'+b.tbThisPhone
    whennot 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
    whennot matched then
    insert (tbThisID,tbContent)
    values(b.tbThisID,b.tbThisPhone);
    复制代码

    这样得到的结果为:

    希望有用。

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

    merge into TableThat as a 
    using (select * from TableThis where tbThisID=5) as b
    on a.tbThisID = b.tbThisID
    when matched then
    delete
    whennot matched then 
    insert (tbThisID,tbContent)
    values(b.tbThisID,b.tbThisPhone);

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

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

  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/mq0036/p/9430490.html
Copyright © 2011-2022 走看看