我想:
我使用公共表表达式来实现它,但我无法使其工作。
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规范,但仍然遇到问题:)
答案 0 :(得分:1)
通常,CTE的语法看起来更像这样。注意parens。
With CTE AS
(
select * from MyTable where Column1 is null order by Column2 desc
)
Update CTE
Set Column3= 1, Column4 = 1, Column5 = 1;
但是this documentation建议您不能将UPDATE语句与CTE一起使用。
您可以在任何地方定义公用表表达式 全选声明。例如,您可以包含公用表 SELECT,INSERT,SELECT INTO或CREATE VIEW语句中的表达式。
可能的解决方法
如果CTE不可更新,只需删除CTE,然后编写UPDATE语句。你根本不需要ORDER BY。这看起来像是一个等效的UPDATE语句。
update MyTable
set ...
where Column1 is null
答案 1 :(得分:0)
怎么样
UPDATE (
SELECT * FROM MYTABLE WHERE COLUMN1 IS NULL ORDER BY COLUMN2 DESC
FETCH FIRST 1 ROW ONLY
)
SET COLUMN3= 1, COLUMN4 = 1, COLUMN5 = 1;
或者,如果您想获得更大的灵活性,也许我对此How to Update Multiple Queries in optimized way in DB2的回答