简体   繁体   English

在DB2 / AS400中使用Join更新查询

[英]Update Query with Join in DB2/AS400

I'm somewhat new to DB2 on an AS400, today I managed to set the value of a single field to the wrong amount in 300k+ records, and now I need to fix it... 我对AS400上的DB2有点陌生,今天我设法将单个字段的值设置为300k +记录中的错误数量,现在我需要对其进行修复...

I'm having a problem with the UPDATE statement: 我对UPDATE语句有疑问:

UPDATE WHSPSLP
SET WHSPSLP.WHS_TOT_VALUE = BUWHSPSLP.WHS_TOT_VALUE
WHERE WHSPSLP.WHS_PSLP_NO = BUWHSPSLP.WHS_PSLP_NO

I'm updating the field with the correct value from a back up of the table, but I just can't get it right. 我正在从表的备份中使用正确的值更新该字段,但我无法正确完成此操作。

Thanks 谢谢

If BUWHSPSLP.WHS_TOT_VALUE is a constant value, for all the records you can use one update statement like this: 如果BUWHSPSLP.WHS_TOT_VALUE是一个常量值,则对于所有记录,您可以使用一个更新语句,如下所示:

DECLARE v_WHSTotalValue INT;
SET v_WHSTotalValue = (
    SELECT WHS_TOT_VALUE 
    FROM BUWHSPSLP 
    FETCH FIRST 1 ROWS ONLY
);

UPDATE WHSPSLP
SET WHS_TOT_VALUE = v_WHSTotalValue 
WHERE WHS_PSLP_NO IN (
    SELECT WHS_PSLP_NO 
    FROM BUWHSPSLP
);

Else, you will need to loop through all the records using a cursor and update each of them as follows: 否则,您将需要使用游标遍历所有记录并按以下方式更新每个记录:

BUWHSPSLPLoop:
FOR v AS cur1 CURSOR WITH HOLD FOR 
    SELECT WHS_TOT_VALUE, WHS_PSLP_NO 
    FROM BUWHSPSLP
DO
    UPDATE WHSPSLPSET 
    SET WHS_TOT_VALUE = v.WHS_TOT_VALUE 
    WHERE WHS_PSLP_NO = v.WHS_PSLP_NO;
END FOR BUWHSPSLPLoop;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM