0

我在尝试着:

  1. 选择一行并将其命名为 CTE
  2. 更新该表 CTE 的一些列

我正在使用公用表表达式来实现它,但我无法让它工作。

Begin
With CTE AS
(select * from MyTable where Column1 is null order by Column2 desc
(Update CTE
Set Column3= 1, Column4 = 1, Column5 = 1))
Commit;

我尝试遵循 DB2 规范,但仍然遇到问题 :)

4

2 回答 2

1

通常,CTE 的语法看起来更像这样。注意括号。

With CTE AS
(
  select * from MyTable where Column1 is null order by Column2 desc
)
Update CTE
Set Column3= 1, Column4 = 1, Column5 = 1;

但是此文档建议您不能将 UPDATE 语句与 CTE 一起使用。

只要有全查询语句,您就可以定义公用表表达式。例如,您可以在 SELECT、INSERT、SELECT INTO 或 CREATE VIEW 语句中包含公用表表达式。


可能的解决方法

如果 CTE 不可更新,只需删除 CTE,然后编写 UPDATE 语句。您在这里根本不需要 ORDER BY。这看起来像一个等效的 UPDATE 语句。

update MyTable
set ...
where Column1 is null
于 2012-11-27T11:56:25.913 回答
1

这个怎么样

UPDATE (
  SELECT * FROM MYTABLE WHERE COLUMN1 IS NULL ORDER BY COLUMN2 DESC
  FETCH FIRST 1 ROW ONLY
)
SET COLUMN3= 1, COLUMN4 = 1, COLUMN5 = 1;

或者,如果您想要更多的灵活性,也许我对这个 如何在 DB2 中以优化方式更新多个查询的回答

于 2018-07-19T21:34:39.920 回答