1

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

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

但是,在 AS400 DB2 上运行时。

我有这样的数据:

        Table1  | Table2
     fillerinfo |myfillerinfo
     -----------|-------------
         A      |   b
         c     |   D
       E       |   f

像上面一样,我有 500K 记录。

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

我收到错误:

关键字 FROM 不是预期的。有效令牌:使用 SKIP WAIT WITH WHERE。原因 。. . . . : 这里没有预期的关键字 FROM。在关键字 FROM 中检测到语法错误。有效令牌的部分列表是 USE SKIP WAIT WITH WHERE。此列表假定该语句在出现意外关键字之前是正确的。错误可能出现在语句的前面,但语句的语法在这一点上似乎是有效的。恢复 。. . :检查指定关键字区域中的 SQL 语句。可能缺少冒号或 SQL 分隔符。SQL 要求在将保留字用作名称时对其进行分隔。更正 SQL 语句并再次尝试请求。

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

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

如何使用连接更新列中的多条记录?请建议。

4

2 回答 2

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 子句。

于 2017-12-15T14:32:58.057 回答
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 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
        )
于 2017-12-15T07:46:44.507 回答