No, nejde o to, jestli to dokážeš nebo ne. Jde o to, jestli to musíte udělat nebo ne. Ve vašem dotazu nevidím žádná kritéria filtru. Chcete aktualizovat všechny řádky? Nevidím potřebu CTE ve vašem případě.
Kdy potřebujete CTE , tj. klauzule s jako metoda faktoringu dílčího dotazu, kdykoli máte scénář, kdy se dílčí dotaz provádí vícekrát. Pomocí klauzule WITH zajistíte, že poddotaz bude proveden jednou a sada výsledků bude uložena jako dočasná tabulka.
Ano, můžete použít WITH klauzule pro UPDATE tvrzení.
Například,
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Můžete použít SLOUČENÍ výpis POUŽÍVÁNÍ WITH doložka.
Například,
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>