oracle表中如果存在就不更新,如果不存在就插入的语句怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle表中如果存在就不更新,如果不存在就插入的语句怎么写相关的知识,希望对你有一定的参考价值。
一表
no A B
1 x 2011
2 X 2010
3 z 2010 例如, 同一张表,如果有2011的数据,那就不变,如果没有2011的数据,那就把2010的数据复制为2011的。 这语句怎么写。 我糊涂了。
insert into tablename
select no,A, '2011' B from tablename t1
where B = '2010'
and not exists (
select 1 from tablename t2 where t1.a = t2.a and t2.B = '2011'
)
或者可以用merge是实现
merge into tablename t1
using (select no,A, '2011' B from tablename t1
where B = '2010'
and not exists (
select 1 from tablename t2 where t1.a = t2.a and t2.B = '2011'
)
) t2
on (t1.a = t2.a and t1.b = t2.b)
when matched then
update t1.no = t2.no
when not matched then
insert (t1.no,t1.a,t1.b)
values (t2.no,t2.a,t2.b); 参考技术B 目前普遍的做法是插入一条数据,就回写一个状态,这样每次查询的值都是没有那个状态的,由此达到不重复取 参考技术C 一条语句写不出来的
通常思路,先判断表里有没有2011数据,没有再插入本回答被提问者采纳
oracle数据库,覆盖插入数据---- merge into
在开发中我们经常会碰到这么一个场景,列如用户修改简单的个人基本信息,这个时候就需要判断用户的基本信息是否存在,如果是首次录入不存在就在表中插入一条信息,如果存在就更新表里的信息。
要实现这种这种场景很简单,我们最常用的就是先查询一下用户的基本信息,执行一下select方法,如果数据存在就执行update方法,如果不存在就就执行insert 方法。这是一种解决思路。
当只是很简单的条件判断时,我们也有另外一种数据库层面的解决思路就是merge into ,很多数据库都有这种语句,因为我用的oracle,这里就记录下oracle的用法,从version 9开始就支持的语法。
MERGE INTO table_name t1
USING (select A a,B b,C c from dual) t2
ON (t1
.a = t2.a)
WHEN MATCHED THEN
UPDATE t1 SET B= b, C= c
WHEN NOT MATCHED THEN
INSERT t1
VALUES (a,b,c);
以上是关于oracle表中如果存在就不更新,如果不存在就插入的语句怎么写的主要内容,如果未能解决你的问题,请参考以下文章
oracle数据库,覆盖插入数据---- merge into