使用MERGE语句从一个表中的选择的行更新或插入到另一个表

是否更新或插入到目标表中的决定是基于在ON子句中的条件。它可以让你避免多个INSERT和UPDATE DML语句。

语法为:

MERGE INTO table

USING data_source

ON (condition)

WHEN MATCHED THEN update_clause

WHEN NOT MATCHED THEN insert_clause;

案例:

比如现在有A、B两个表

A

name sal

张三 4000

李四 5000

王五 5500

B

name sal

张三 5300

刘二 7000

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

现在有个需求,要将B表里的数据更新到A表,如果A表存在的记录就更新sal字段,如果A表不存在的记录就往里插入。

如果用insert、update实现

insert into A

select * from B where B.name not in (select name from A);

update A

set A.sal = (select b.sal from B where B.Name = A.Name)

where A.Name in (select B.Name from B);

如果用MERGE实现

merge into A

using B

on (A.NAME = B.NAME)

when matched then

update

set A.SAL = B.Sal

when not matched then

insert (A.NAME,A.SAL)

values (B.Name,B.SAL);

时间: 2024-08-29 07:16:15

使用MERGE语句从一个表中的选择的行更新或插入到另一个表的相关文章

如何将数据表中某个字段的内容选出来插入到另一个数据表中,并显示到Gridview中,用一次数据库连接可否?(用代码实现)

问题描述 如何将数据表中某个字段的内容选出来插入到另一个数据表中,并显示到Gridview中,用一次数据库连接可否?(用代码实现) 解决方案 解决方案二:建个临时表,存放Table1的全部数据和Table2的某个字段的数据临时表的字段为Table1的字段+Table2的某个字段GridView的DataSource设置为这个临时表就可以了解决方案三:LZ,你说的这种情况肯定是可以实现的.但是你的意思没有表达的很清楚啊.你是希望从第一个表中哦啊选出来的数据怎么插入第二个表中呢?说清楚你的要求,兄弟

sql server 2000 一个表的数据插入到三个相关联表中,一条一条的插入

FROM http://www.cnblogs.com/geovindu/archive/2009/07/03/1516159.html 1/**//********************************************************** 2测试数据 sql server 2000 一个表的数据插入到三个相关联表中,一条一条的插入 3---涂聚文 缔友计算机信息技术有限公司 软件工程师 geovindu@163.com www.dupcit.com 4---捷为工作室

jquery-select下拉表中 有默认值 如何排除默认值判断select下表是否选择没选择提示

问题描述 select下拉表中 有默认值 如何排除默认值判断select下表是否选择没选择提示 <td> <select id=""applicationamount3"" name=""applicationamount""> <option value=""2"" selected=""selected"" >

sqlite-如何在表中统计 of 的行数?

问题描述 如何在表中统计 of 的行数? 我用下面的代码获取行数,但是程序被挂起.怎么回事呢? private int countbaglist() { int count = 0; SQLiteDatabase db = datasource.getWritableDatabase(); Cursor cursor = db.rawQuery( "select count(*) from shoplist where itemname=?", new String[] { Strin

一张表如何关联另一张表中的两条数据!出现错误!代码和表如下!在线等

问题描述 一张表如何关联另一张表中的两条数据!出现错误!代码和表如下!在线等 public DataTable GetScrapTirePage(StringBuilder SqlWhere, IList<SqlParam> IList_param, int pageIndex, int pageSize, ref int count) { StringBuilder strSql = new StringBuilder(); strSql.Append("select Base_S

sql-oracle表中记录大于100条时删除插入时间最早的记录

问题描述 oracle表中记录大于100条时删除插入时间最早的记录 假设数据表中有字段id.name.sex.age.className.createtime.现在希望表 中保留100条记录,当第101条记录插入时,删除createtime最早的一条记录. 代码中如何写sql效率比较高,求大神指点! 解决方案 要效率高,就不要每次插入都删除.而是直接用top 100取,对时间字段设置为排序+索引字段.

数据库 sql sqlserver-怎么给数据库的表中的某一列更新内容

问题描述 怎么给数据库的表中的某一列更新内容 数据库:SqlServer2005 表:table_1 列: a_id(pk,int) b_id(int) c_id(int) 现在我要把table_1中的b_id=3的c_id列在原来的值上加20 求sql 谢谢

PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br_php技巧

nl2br()定义和用法 nl2br() 函数在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />). 语法 nl2br(string)参数 描述 string 必需.规定要检查的字符串. 例子 复制代码 代码如下: <?php echo nl2br("One line.\nAnother line."); ?> 输出: One line. Another line.HTML 代码: One line.<br /> Anothe

用SQLServer实现数据表中,将任意一条记录信息移动到该表中的任意位置

server|sqlserver|数据 -- 定位数据-- 设计思路:--   保存要被移动记录的原主键值和新主键值(如果有主键的话),然后比较两个主键值的大小(记录信息按升序排列),--   如果原主键值大,表明该记录被移动到前面的新位置,可将原位置的记录信息保存下来,并将从新位置的记录信息到--   原记录的前一条记录的信息顺次往下移动,把保存的原记录移动到新位置即可.--   如果原主键值小,表明该记录被移动到后面的新位置,可将原位置的记录信息保存下来,并将从新位置的记录信息到--   原