【问题标题】:Update Query with Join in DB2/AS400在 DB2/AS400 中使用 Join 更新查询
【发布时间】:2009-08-13 22:49:30
【问题描述】:

我对 AS400 上的 DB2 有点陌生,今天我设法在 300k+ 条记录中将单个字段的值设置为错误的数量,现在我需要修复它...

我的 UPDATE 语句有问题:

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

我正在使用来自表格备份的正确值更新该字段,但我无法正确获取它。

谢谢

【问题讨论】:

    标签: db2


    【解决方案1】:

    如果 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
    );
    

    否则,您将需要使用游标遍历所有记录并按如下方式更新每个记录:

    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;
    

    【讨论】:

      猜你喜欢
      • 2012-12-11
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 2011-10-07
      • 2021-10-30
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      相关资源
      最近更新 更多