多个记录更新到具有内部联接DB2的列中

时间:2017-12-15 07:29:52

标签: db2 db2-400 iseries-navigator

我已经编写了这个更新语句来更新DB2中的记录。

firefox&

但是,在AS400 DB2上运行时。

我有这样的数据:

UPDATE schemaname.tablename
SET fillerinfo = myfillerinfo
FROM schemaname.tablename,schemaname.tablename1
WHERE ID = uid1
AND PID=uuplanid
AND ACCTNO=uacctno

如上所述我有500K记录。

显示错误:无法执行语句。

我收到错误:

  

关键字FROM未预期。有效代币:使用SKIP WAIT WITH WHERE。   原因。 。 。 。 。 :这里不期望关键字FROM。语法   在关键字FROM处检测到错误。有效令牌的部分列表   是在哪里使用SKIP WAIT。此列表假定该语句是   纠正意外的关键字。该错误可能更早   语句,但语句的语法似乎是有效的   点。恢复。 。 。 :检查区域中的SQL语句   指定的关键字。可能缺少冒号或SQL分隔符。 SQL   要求保留字在用作名称时分隔。   更正SQL语句并再次尝试请求。

所以我审阅了这个链接,看它是否有帮助:https://oscarvalles.wordpress.com/2013/05/12/db2-update-with-inner-joins/

但是,上面链接中的这个示例显示更新单个记录。

如何使用join更新列中的多个记录?请建议。

2 个答案:

答案 0 :(得分:1)

DB2与MS SQL Server略有不同。您可以从像这样的子选择

更新
UPDATE schemaname.tablename
SET fillerinfo = (SELECT myfillerinfo
                  FROM schemaname.tablename,schemaname.tablename1
                  WHERE ...)
WHERE ID = uid1
AND PID=uuplanid
AND ACCTNO=uacctno

我怀疑您可以在子选择中确定正确的WHERE子句。

答案 1 :(得分:0)

尝试INNER JOIN

UPDATE T1
SET 
fillerinfo = T2.myfillerinfo
FROM schemaname.tablename t1
INNER JOIN schemaname.tablename1 T2
ON T1.ID = T2.uid1
WHERE T1.PID=T2.uuplanid
AND T1.ACCTNO=T2.uacctno

或尝试MERGE

MERGE INTO schemaname.tablename t1
    USING
    (
        SELECT
            uid1,
            uuplanid,
            uacctno,
            myfillerinfo 
            FROM schemaname.tablename1 
    )T2
        ON T1.ID = T2.uid1
    WHEN MATCHED AND T1.PID=T2.uuplanid
            AND T1.ACCTNO=T2.uacctno
        THEN UPDATE
            SET T1.fillerinfo = T2.myfillerinfo

或试试这个

UPDATE schemaname.tablename T1
    SET 
        T1.fillerinfo = (SELECT T2.myfillerinfo FROM schemaname.tablename1 T2
                            WHERE T1.ID = T2.uid1
                            AND T1.PID=T2.uuplanid
                            AND T1.ACCTNO=T2.uacctno
                        )
        WHERE EXISTS
        (
            SELECT 1 FROM schemaname.tablename1 T2
                            WHERE T1.ID = T2.uid1
                            AND T1.PID=T2.uuplanid
                            AND T1.ACCTNO=T2.uacctno
        )