首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不存在则插入,如果存在则更新某些值

如果不存在则插入,如果存在则更新某些值
EN

Stack Overflow用户
提问于 2021-11-23 10:48:04
回答 1查看 51关注 0票数 0

我正在使用JDBI3 (并且希望使用@SQLUpdate)和一个Oracle DB。

我想插入一个有4列的项目到表中,如果它不存在,如果它存在,我想改为更新项目的4个值中的3个。如果不是Oracle,我会使用一些ON DUPLICATE_KEY逻辑,但这在Oracle中是不存在的。我读到了一些关于使用Merge的东西,但对于我想要做的事情来说,这些查询似乎真的很不可靠。关于寻找什么有什么建议吗?

附加问题:如果我应该使用合并(假设是某种形式的子查询),那么查询对性能有什么影响?我认为这个数据库写得很重。

代码语言:javascript
复制
MERGE INTO device db USING (SELECT 'abc' AS col1, 'bcd' as col2, 'cde' as col3, 'def' as col4 FROM DUAL) input
on (db.col1 = input.col1 AND db.col2= input.col2)
WHEN MATCHED THEN UPDATE
SET db.col4 = input.col4
WHEN NOT MATCHED THEN INSERT
(db.col1, db.col2, db.col3, db.col4)
VALUES (input.col1, input.col2, input.col3, input.col4)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-23 11:08:13

合并它。性能良好。

基于您的描述的虚拟示例:

代码语言:javascript
复制
merge into target_table a
  using source_table b
  on (a.id = b.id)
when matched then update set
  a.name = b.name,
  a.job  = b.job,
  a.sal  = b.sal
when not matched then 
  insert (id, name, job, sal) 
  values (b.id, b.name, b.job, b.sal);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70079512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档