当前位置: 首页 > 面试题库 >

在Oracle SQL的MERGE语句中为INSERT / UPDATE添加条件

衡建中
2023-03-14
问题内容

我必须在表target_table中插入/更新一些记录。这些记录是一个source_table。

我正在使用MERGE更新/插入target_table。

MERGE
   INTO  target_table tgt
   USING source_table src
   ON  ( src.column1 = tgt.column1 and
         src.column2 = tgt.column2)
WHEN MATCHED
THEN
   UPDATE
   SET   tgt.column3= src.column3,
         tgt.column4 = src.coulmn4   
WHEN NOT MATCHED
   THEN
INSERT ( tgt.column1,
         tgt.column2,
         tgt.column3,
         tgt.column4 )
VALUES ( src.coulmn1,
         src.coulmn2,
         src.coulmn3,
         src.coulmn4);

我想在更新中添加一些特定条件。

IF target_table.column3 in (val1','val2)

那么就应该只有更新,否则就没有更新或插入。


问题答案:

您可以简单地在中添加WHERE子句UPDATE。在oracle
docs中有更多关于它的信息。

因此,在您的情况下,它应如下所示:

...
WHEN MATCHED
THEN
   UPDATE
   SET   tgt.column3= src.column3,
         tgt.column4 = src.coulmn4
   WHERE tgt.column3 IN (val1, val2) 
WHEN NOT MATCHED
...


 类似资料:
  • 问题内容: 这不起作用: 任何想法如何通过id将插入范围缩小到特定行? 问题答案: 在插入语句中,您将没有现有行来执行操作?您要插入新行,是否意味着要执行更新语句?

  • 问题内容: 我有此UPDATE MySQL语句,可以正常工作。 我想转换此UPDATE语句,以便在找不到相同行的情况下可以添加新行。我相信使用INSERT INTO ONDUPLICATE KEY UPDATE是正确的方法。但是,我尝试了很长时间却失败了。 我应该如何将该UPDATE语句转换为相应的INSERT INTO ON DUPLICATE KEY UPDATE语句? 问题答案: 您正在寻找

  • 问题内容: 我正在进行大量CRUD操作,并在CUD之外创建合并存储过程。我存储的过程看起来像这样 当我执行此操作时,我得到了这个完整的错误 消息10714,级别15,状态1,过程usp_AdministrationHistoryMerge,第36行在MERGE语句的“ UPDATE”子句中,“ WHEN MATCHED”类型的动作不能出现多次。 我四处寻找SO,并找到了解决此问题的几种方法,但是我

  • 问题内容: 这里一个非常常见的问题是如何进行,这是MySQL调用的内容,并且该标准支持该MERGE操作。 鉴于PostgreSQL不直接支持它(在9.5页之前),您如何做到这一点?考虑以下: 现在,假设你想“UPSERT”的元组(2, ‘Joe’),(3, ‘Alan’),因此新表的内容是: 那就是人们在讨论时谈论的话题upsert。至关重要的是,在存在多个事务处理同一个表的情况下,任何方法都必须

  • 我正在尝试将多列添加到phpMyAdmin中的现有表中,但我一直收到相同的错误: #1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册以获取正确的语法... 我在写: 我已经参考了过去在StackOverflow上的帖子,我正在遵循专家的建议,那么为什么我会出错呢?

  • 问题内容: 引用MySQL INSERT手册-UPDATE也一样: 使用关键字DEFAULT可以将列明确设置为其默认值。这使编写INSERT语句(为少数几个列分配值)更加容易,因为它使您避免编写不完整的VALUES列表,该列表不包含表中每个列的值。否则,您将不得不写出与VALUES列表中的每个值相对应的列名列表。 简而言之,如果我写 插入新的一列,并将column2设置为其默认值(无论它是多少)。