oracle表中如果存在就不更新,如果不存在就插入的语句怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle表中如果存在就不更新,如果不存在就插入的语句怎么写相关的知识,希望对你有一定的参考价值。

一表
no A B
1 x 2011
2 X 2010
3 z 2010 例如, 同一张表,如果有2011的数据,那就不变,如果没有2011的数据,那就把2010的数据复制为2011的。 这语句怎么写。 我糊涂了。

参考技术A 最常规的方式是用insert实现
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

SQL中插入数据并更新数据的某个字段

Oracle整合Mybatis实现list数据插入时,存在就更新,不存在就插入以及随机抽取一条记录

HSQLDB 如果不存在则插入,如果存在则更新

如果表中的行不存在,我如何更新或插入它?

如果 mysql 数据库中的表中不存在,则更新或插入多条记录