如何修复 db2 中的“SQL Error Keyword FROM not expected”?

问题描述 投票:0回答:3

我有这个查询需要更新

UPDATE pomhst hst
   SET hst.ponot1 = hdr.poshp1 
  FROM pomhdr hdr
 WHERE LENGTH(LTRIM(RTRIM(hst.poshp1))) > 0
   AND hdr.postat = 3;

当我执行它时,它显示了这个错误

SQL 错误 [42601]:[SQL0199] 关键字 FROM 不是预期的。有效令牌:使用 SKIP WAIT WITH FETCH LIMIT ORDER WHERE OFFSET。 我不知道我的查询有什么问题

我尝试添加内部连接,但效果不佳。

sql db2
3个回答
0
投票

有些数据库管理系统如

Oracle
,
DB2
不允许语法

UPDATE a_table SET .. FROM another_table
不像他们中的一些人,例如
Postgres
.

您可以使用包含

EXISTS
关键字的语法,如下面的语句

UPDATE pomhst hst
   SET hst.ponot1 = hdr.poshp1 
 WHERE EXISTS ( SELECT 1
                  FROM pomhdr hdr
                 WHERE LENGTH(LTRIM(RTRIM(hst.poshp1))) > 0
                   AND hdr.postat = 3)

0
投票

你可以使用 exists:

UPDATE pomhst hst SET hst.ponot1 = hdr.poshp1 
WHERE exists (select *  from FROM pomhdr hdr where LENGTH(LTRIM(RTRIM(hst.POSHP1)))  > 0 AND hdr.POSTAT = 3;

0
投票

DB2 仍然不支持更新语句中的联接,因此您需要使用 MERGE;

或者,您可以简单地使用子查询来完成它,如下所示:

update pomhst hst 
set hst.ponot1 = (
    select hdr.poshp1 
    from pomhdr hdr 
    where hdr.ponum = hst.ponum and hdr.POSTAT = 3
) 
where LENGTH(LTRIM(RTRIM(hst.POSHP1))) > 0;

这里有一个类似的例子.

© www.soinside.com 2019 - 2024. All rights reserved.