【问题标题】:merge into or insert ignore for db2合并或插入 db2 的忽略
【发布时间】:2019-10-07 12:40:44
【问题描述】:

我觉得这应该相当简单,但我在找出最佳方法时遇到了问题

我在这个 subitem_to_item_status 表中有许多具有状态的子项,但我需要为所有尚不存在的子项插入一条记录。我不需要更新里面的内容,我只是想复制一个“插入/忽略”

子项的样本数据

ITEM_SUBITEMT

item_subitem_id   |   creator_identifier
-----------------------------------------
12                      12345
13                      12345
14                      12345
15                      12345
16                      12345
17                      12345
18                      12345
19                      12345
20                      12345
21                      12345
22                      12345

SUBITEM_TO_ITEM_STATUS

SUBITEM_ID   |   ITEM_STATUS_ID   |   CREATED_BY_IDENTIFIER   
------------------------------------------------------------
12                  1                   12345
15                  1                   12345
16                  1                   12345
20                  1                   12345

所以有了这些数据,我只需要插入第一个表中没有 id 12、15、16 或 20 的记录

    MERGE INTO schema.SUBITEM_TO_ITEM_STATUS (SUBITEM_ID,ITEM_STATUS_ID, CREATED_BY_IDENTIFIER,ROWCHANGE,CREATED_AT) AS T
    USING( (SELECT ITEM_SUBITEM_ID, 1, CREATOR_IDENTIFIER, NOW(),NOW() FROM schema.ITEM_SUBITEMT) AS S
    ON S.ITEM_SUBITEM_ID = T.SUBITEM_ID
    WHEN NOT MATCHED THEN INSERT;

【问题讨论】:

    标签: sql db2 db2-400


    【解决方案1】:

    MERGE 声明错误。
    试试这个:

    MERGE INTO schema.SUBITEM_TO_ITEM_STATUS T
    USING (SELECT ITEM_SUBITEM_ID, 1 AS ITEM_STATUS_ID, creator_identifier FROM schema.ITEM_SUBITEMT) S ON S.ITEM_SUBITEM_ID = T.SUBITEM_ID
    WHEN NOT MATCHED THEN 
    INSERT (SUBITEM_ID, ITEM_STATUS_ID, CREATED_BY_IDENTIFIER) 
    VALUES (S.item_subitem_id, S.ITEM_STATUS_ID, S.creator_identifier);
    

    【讨论】:

      【解决方案2】:

      为什么不使用insert?

      insert into SUBITEM_TO_ITEM_STATUS (SUBITEM_ID, ITEM_STATUS_ID, CREATED_BY_IDENTIFIER)
         select item_subitem_id, 1, creator_identifier
         from ITEM_SUBITEMT
         where item_subitem_id not in (12, 15, 16, 20);
      

      如果你的意思是你不想在表中重复,你可以试试:

      insert into SUBITEM_TO_ITEM_STATUS (SUBITEM_ID, ITEM_STATUS_ID, CREATED_BY_IDENTIFIER)
         select item_subitem_id, 1, creator_identifier
         from ITEM_SUBITEMT s
         where not exists (select 1
                           from SUBITEM_TO_ITEM_STATUS tis
                           where tis.item_subitem_id = s.item_subitem_id
                          );
      

      【讨论】:

        猜你喜欢
        • 2012-08-11
        • 2014-02-19
        • 2013-06-26
        • 2012-08-07
        • 2016-06-15
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多