我已经编写了这个更新语句来更新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更新列中的多个记录?请建议。
答案 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
)