Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle:Sử dụng CTE với điều khoản cập nhật

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>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy dấu thời gian này ở định dạng tôi muốn, Oracle SQL

  2. Cách biểu diễn phép chia quan hệ (biểu thức đại số cơ bản) trong SQL

  3. Cắt bỏ khoảng trắng (khoảng trắng dòng và tab mới) trong chuỗi trong Oracle

  4. Làm cách nào để xác định giá trị chuỗi của kiểu dữ liệu Oracle bằng mã của nó?

  5. Có bất kỳ trình phân tích cú pháp nào tồn tại cho table_reference của Oracle DML không?