第一次插入的合并语句

时间:2017-05-24 08:52:01

标签: sql sql-merge

我做了一些研究,找不到任何解决方案,因此在此发布。

我们有一个每天运行的dataload工作。我们有单独的DML语句来插入,更新等。我们希望避免插入语句多次运行。

是否可以选择在此方案中使用merge语句来更新记录是否存在或如果不存在则插入?

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

我们正在使用Oracle db2 for dbms

提前致谢!

2 个答案:

答案 0 :(得分:0)

使用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

答案 1 :(得分:0)

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