使用db2与php参数合并

时间:2018-10-04 14:03:34

标签: sql merge db2

我在脚本中使用PHP参数将有效的插入DB2。它可以像我想要的那样工作,但是我正在尝试对其进行修复,这样我就不必每次都进行截断和重建。如果我已经存在唯一的关键字段,我想简单地更新我的最后两个字段。

插入:

INSERT INTO testSchema.metrics (cust, item, material, color, group, group2, sales, score )
    VALUES (
        :cust_id, 
        :item,
        :material,
        :color,
        :group,
        :group2,
        :sales,
        :score
    )

我对cust_id,项目,材料和颜色有唯一的键约束,所以我基本上尝试在UPS2中进行UPSERT。

我知道我可以在DB2中使用MERGE,并且我已经从这里开始,但是我对如何充实它感到困惑,尤其是因为我使用的是脚本中的参数。

这是我的伪装合并:

MERGE INTO testSchema.metrics as m
USING // I guess I would need all of my parameters here?
ON :cust_id, :item, :material, :color
WHEN MATCHED THEN
    UPDATE SET sales = :sales, score = :score
WHEN NOT MATCHED THEN
    INSERT (cust, item, material, color, group, group2, sales, score )
    VALUES (
            :cust_id, 
            :item,
            :material,
            :color,
            :group,
            :group2,
            :sales,
            :score
        );

我觉得这是基本的想法,但是我很困惑如何修改参数的USING和ON行。

我只是想说(如果cust_id,项目,材料和颜色的行匹配,然后更新新的销售额和得分。否则,插入)

2 个答案:

答案 0 :(得分:1)

根据此IBM tutorial(在“使用值的单行MERGE”部分下),您只需要在USING子句中的一个位置设置参数,然后将每个参数映射到别名< em> S 。然后定义MATCHEDNOT MATCHED逻辑。

MERGE INTO testSchema.metrics AS T 
      USING (VALUES (
                     :cust_id, 
                     :item,
                     :material,
                     :color,
                     :group,
                     :group2,
                     :sales,
                     :score
                    )
             ) 
     AS S(CUST_ID, ITEM, MATERIAL, COLOR, "GROUP", GROUP2, SALES, SCORE)
     ON S.CUST_ID = T.CUST_ID
  WHEN MATCHED 
     THEN UPDATE SET SALES = S.SALES, SCORE = S.SCORE
  WHEN NOT MATCHED 
     THEN INSERT VALUES(S.CUST_ID, S.ITEM, S.MATERIAL, S.COLOR, 
                        S."GROUP", S.GROUP2, S.SALES, S.SCORE);

答案 1 :(得分:0)

尝试一下:

MERGE INTO testSchema.metrics as m
USING (
SELECT * FROM TABLE(VALUES 
(:cust_id, :item, :material, :color, :group, :group2, :sales, :score)
) t (cust_id, item, material, color, group, group2, sales, score)
) t on t.cust_id=m.cust_id and t.item=m.item
WHEN MATCHED THEN UPDATE 
SET sales = t.sales, score = t.score
WHEN NOT MATCHED THEN INSERT (cust_id, item, material, color, group, group2, sales, score)
VALUES (t.cust_id, t.item, t.material, t.color, t.group, t.group2, t.sales, t.score);