Е, не става въпрос за това дали можете да го направите или не. Въпросът е дали трябва да го направите или не. Във вашето запитване не виждам критерии за филтриране. Искате ли да актуализирате всички редове? Не виждам нужда от CTE във вашия случай.
Кога имате нужда отCTE , т.е. клауза with като метод за факторизиране на подзаявка, когато имате сценарий, при който подзаявката се изпълнява многократно. Използвате клауза WITH, за да сте сигурни, че подзаявката се изпълнява веднъж и наборът от резултати се съхранява като временна таблица.
Да, можете да използвате С клауза за АКТУАЛИЗАЦИЯ изявление.
Например,
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Можете да използвате ОБЕДИВАНЕ изявление USING наС клауза.
Например,
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>