我在尝试着:
- 选择一行并将其命名为 CTE
- 更新该表 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 规范,但仍然遇到问题 :)
我在尝试着:
我正在使用公用表表达式来实现它,但我无法让它工作。
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 规范,但仍然遇到问题 :)
通常,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
这个怎么样
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 中以优化方式更新多个查询的回答