Chà, vấn đề không phải là bạn có làm được hay không. Đó là về việc bạn có cần phải làm điều đó hay không. Trong truy vấn của bạn, tôi không thấy bất kỳ tiêu chí lọc nào. Bạn muốn cập nhật tất cả các hàng? Tôi không thấy cần đến CTE trong trường hợp của bạn.
Khi nào bạn cần CTE , tức là a với mệnh đề làm phương thức bao thanh toán truy vấn phụ bất cứ khi nào bạn gặp tình huống trong đó truy vấn phụ được thực thi nhiều lần. Bạn sử dụng mệnh đề WITH để đảm bảo truy vấn con được thực thi một lần và tập kết quả được lưu trữ dưới dạng bảng tạm thời.
Có, bạn có thể sử dụng VỚI mệnh đề cho một CẬP NHẬT bản tường trình.
Ví dụ:
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Bạn có thể sử dụng MERGE tuyên bố SỬ DỤNG VỚI mệnh đề.
Ví dụ:
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>