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

PostgreSQL:cách cập nhật các hàng trong CTE

with cte as(
select ....... from aTable
),update_cte as(
update cte set aField=(select somthing from cte1)
)

Bạn không thể làm điều đó.

UPDATE có thể không tham chiếu đến một thuật ngữ CTE trong PostgreSQL, vì CTE đã được vật chất hóa. Họ không chỉ xem dữ liệu cơ bản. (Điều đó đôi khi thực sự khó chịu, nhưng nó là như vậy).

Bạn có thể:

CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable;

UPDATE someview SET afield = ...

nếu bạn muốn; sẽ hoạt động trên các phiên bản PostgreSQL mới hơn hỗ trợ các chế độ xem có thể cập nhật tự động. Tôi nghĩ 9,2 đúng.

Nếu không, tôi nghĩ bạn muốn một cái gì đó như:

WITH cte1 as (
  select ..... from bTable inner join cte using(anID)
)
update aTable 
set aField=(select somthing from cte1)
WHERE ... where clause from cte ...
RETURNING *;

nhưng thực sự, xin hãy đừng gọi các điều khoản CTE của bạn cte , cte1 , v.v ... Đặt cho chúng những cái tên hữu ích, có tính mô tả cho bạn biết chúng là gì. Nó giống như các chương trình chứa đầy các biến có tên a thông qua x ... người tiếp theo phải duy trì mã của bạn hoặc bất kỳ ai mà bạn yêu cầu giúp đỡ, sẽ không thích nó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chức năng tổng hợp nhóm theo ngày trong postgresql

  2. Lỗi cơ sở dữ liệu Postgres Tiêu đề trang không hợp lệ

  3. Làm thế nào để chạy các bài kiểm tra trong django bằng cách sử dụng cơ sở dữ liệu với dữ liệu?

  4. Cách tách các giao dịch chỉ đọc và đọc ghi với JPA và Hibernate

  5. Điều đó có nghĩa là gì khi một quy trình PostgreSQL không hoạt động trong giao dịch?