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

Insert if not exist and update certain values if it does

我正在使用 JDBI3(并且想使用@SQLUpdate)和 Oracle 数据库。

我想将一个有 4 列的项目插入到 table 中(如果它不存在),如果它存在,我想改为更新该项目的 4 个值中的 3 个。如果不是 Oracle,我会使用一些 ON DUPLICATE_KEY 逻辑,但在 Oracle 中不存在。我阅读了一些有关使用 Merge 的内容,但查询对于我尝试做的事情来说似乎真的很不稳定。关于寻找什么的任何提示?

附加问题:如果我应该使用 Merge(我假设使用某种形式的子查询),该查询如何影响性能?我觉得这个数据库写的比较重

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)

合并吧。表现不错。

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

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);