我在脚本中使用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,项目,材料和颜色的行匹配,然后更新新的销售额和得分。否则,插入)
答案 0 :(得分:1)
根据此IBM tutorial(在“使用值的单行MERGE”部分下),您只需要在USING
子句中的一个位置设置参数,然后将每个参数映射到别名< em> S 。然后定义MATCHED
和NOT 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);