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

Hướng dẫn sử dụng mệnh đề WITH trong SQL

Nếu có thể có quyền truy cập ghi đồng thời đến các bảng liên quan, có các điều kiện cuộc đua trong các truy vấn sau đây. Cân nhắc:

Ví dụ của bạn can sử dụng CTE (biểu thức bảng chung), nhưng nó sẽ không cung cấp cho bạn điều gì mà một truy vấn con không thể làm được:

WITH x AS (
   SELECT  psp_id
   FROM    global.prospect
   WHERE   status IN ('new', 'reset')
   ORDER   BY request_ts
   LIMIT   1
   )
UPDATE global.prospect psp
SET    status = status || '*'
FROM   x
WHERE  psp.psp_id = x.psp_id
RETURNING psp.*;

Hàng trả về sẽ là hàng đã cập nhật phiên bản.

Nếu bạn muốn chèn hàng đã trả về vào một bảng khác, đó là nơi có WITH mệnh đề trở nên thiết yếu:

WITH x AS (
   SELECT  psp_id
   FROM    global.prospect
   WHERE   status IN ('new', 'reset')
   ORDER   BY request_ts
   LIMIT   1
   )
, y AS (
   UPDATE global.prospect psp
   SET    status = status || '*'
   FROM   x
   WHERE  psp.psp_id = x.psp_id
   RETURNING psp.*
   )
INSERT INTO z
SELECT *
FROM   y;

Các truy vấn sửa đổi dữ liệu bằng CTE đã được thêm vào với PostgreSQL 9.1.
The hướng dẫn về WITH truy vấn (CTE).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận tất cả các bài đăng với tổng số phiếu bầu và nếu người dùng hiện tại đã bỏ phiếu cho mỗi bài đăng

  2. Không thể hoàn thành di chuyển bình

  3. CTE đệ quy nối các trường với cha mẹ từ điểm tùy ý

  4. sqlalchemy, lọc một cột json chứa một mảng

  5. Có nhà điều hành postgres CLOSEST không?