Tja, det handlar inte om huruvida du skulle kunna göra det eller inte. Det handlar om huruvida du behöver göra det eller inte. I din fråga ser jag inga filterkriterier. Vill du uppdatera alla rader? Jag ser inget behov av CTE i ditt fall.
När behöver du en CTE , d.v.s. en med-sats som en sub-query factoring-metod när du har ett scenario där sub-query exekveras flera gånger. Du använder en WITH-sats för att se till att underfrågan körs en gång och att resultatuppsättningen lagras som en tillfällig tabell.
Ja, du kan använda WITH klausul för en UPPDATERING påstående.
Till exempel,
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Du kan använda en MERGE uttalande ANVÄNDER Med klausul.
Till exempel,
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>