まあ、それはあなたがそれをすることができるかどうかについてではありません。それはあなたがそれをする必要があるかどうかについてです。クエリにフィルター基準が表示されません。すべての行を更新しますか? CTEの必要性はないと思います あなたの場合。
CTEが必要なのはいつですか つまり、サブクエリが複数回実行されるシナリオがある場合は常に、サブクエリの因数分解メソッドとしてwith句を使用します。 WITH句を使用して、サブクエリが1回実行され、結果セットが一時テーブルとして保存されるようにします。
はい、 WITHを使用できます UPDATEの句 声明。
たとえば、
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
MERGEを使用できます ステートメント使用 WITH 条項。
たとえば、
SQL> MERGE INTO emp e USING
2 (WITH average AS
3 (SELECT deptno, AVG(sal) avg_sal FROM emp group by deptno)
4 SELECT * FROM average
5 ) u
6 ON (e.deptno = u.deptno)
7 WHEN MATCHED THEN
8 UPDATE SET e.sal =
9 CASE
10 WHEN e.sal <= u.avg_sal
11 THEN e.sal * 1.05
12 ELSE e.sal * 1.03
13 END
14 /
14 rows merged.
SQL>