第一次插入的合并语句

Merge statement for first time insert

我做了一些研究,但找不到任何解决方案,因此将其张贴在这里。

我们有一个每天 运行 的数据加载作业。我们有单独的 DML 语句来插入、更新等。我们希望避免多次向 运行 插入语句。

是否可以选择在这种情况下使用 merge 语句来在记录存在时进行更新或在记录不存在时进行插入?

如果可能,请给我一个例子,因为我对 sql 语句还很陌生。

我们正在为 dbms 使用 Oracle db2

提前致谢!

使用 IF EXISTS 语句,如下所示:

IF EXISTS (SELECT 1 FROM #mytable# WHERE #column1# = #this# AND #column2# = #that)
BEGIN
   #update statement#
END

ELSE
BEGIN
    #insert statement#
END

编辑: 语法可以在这里找到:https://www.toadworld.com/platforms/ibmdb2/w/wiki/7777.ifthenelse

这意味着我的一般情况在 DB2 中会变成这样:

IF (#count of value# = 1) THEN
   #updatestatement#;
ELSEIF (#count of value# > 1) THEN
   #throw an error, as you cannot update uniquely#
ELSE
   #insertstatement#;
END IF;

我还注意到您可以在 DB2 上 运行 SQL 命令,这也可能对这项任务有用

最后,看看这里,可能会给你更多的想法:)

DB2 for IBM iSeries: IF EXISTS statement syntax

通过 Merge 语句本身完成:)

MERGE INTO table1(storeent_id, name, value) AS t1
  USING (VALUES ((SELECT STOREENT_ID FROM STOREENT WHERE IDENTIFIER='test'), 'SOLR_SERVICEABILITY_URL', 
                                                'Sample')) AS t2(storeent_id, name, value)
  ON t1.name = t2.name AND t1.storeent_id = t2.storeent_id
  WHEN MATCHED THEN
     UPDATE SET
        t1.value = t2.value
  WHEN NOT MATCHED THEN
     INSERT
        (name, storeent_id, value)
        VALUES (t2.name, t2.storeent_id, t2.value);