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;

ただし、このドキュメントでは、CTEでUPDATEステートメントを使用できないことを示しています。

fullselectステートメントを使用できる場所であればどこでも、共通テーブル式を定義できます。たとえば、SELECT、INSERT、SELECT INTO、またはCREATEVIEWステートメントに共通テーブル式を含めることができます。


考えられる回避策

CTEが更新できない場合は、CTEを削除して、UPDATEステートメントを記述します。ここではORDERBYはまったく必要ありません。これは、同等の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 に答える