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

Nhiều CTE trong một truy vấn

Sử dụng từ khóa WITH một lần ở trên cùng. Nếu bất kỳ Biểu thức Bảng Chung (CTE) nào của bạn là đệ quy (rCTE), bạn phải thêm từ khóa RECURSIVE ở trên cùng một lần ngoài ra, ngay cả khi không phải tất cả CTE đều là đệ quy:

WITH RECURSIVE
  cte1 AS (...)         -- can still be non-recursive
, cte2 AS (SELECT ...
           UNION ALL
           SELECT ...)  -- recursive term
, cte3 AS (...)
SELECT ... FROM cte3 WHERE ...

Hướng dẫn sử dụng:

Nếu RECURSIVE được chỉ định, nó cho phép một SELECT truy vấn phụ tự tham chiếu theo tên.

Tôi nhấn mạnh đậm. Và, thậm chí còn sâu sắc hơn:

Tác dụng khác của RECURSIVE đó có phải là WITH không truy vấn không cần phải đặt hàng :một truy vấn có thể tham chiếu đến một truy vấn khác nằm sau trong danh sách. (Tuy nhiên, các tham chiếu vòng tròn hoặc đệ quy lẫn nhau không được triển khai.) Không có RECURSIVE , WITH các truy vấn chỉ có thể tham chiếu đến anh chị em WITH các truy vấn trước đó trong WITH danh sách.

Nhấn mạnh đậm của tôi một lần nữa. Có nghĩa là thứ tự của WITH mệnh đề vô nghĩa khi RECURSIVE từ khóa đã được sử dụng.

BTW, kể từ cte1cte2 trong ví dụ này không được tham chiếu trong SELECT bên ngoài và là SELECT thuần túy bản thân các lệnh (không có hiệu ứng phụ), chúng không bao giờ được thực thi (trừ khi được tham chiếu trong cte3 ).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay đổi cổng máy chủ vùng chứa postgres trong Docker Compose

  2. Cách thay đổi người dùng thành Superuser trong PostgreSQL

  3. Làm cách nào để nhập mô-đun hoặc cài đặt tiện ích mở rộng trong Postgres?

  4. Không có ràng buộc duy nhất hoặc loại trừ nào phù hợp với MỨC ĐỘ BẬT

  5. Cách thay đổi mã hóa bộ sưu tập cơ sở dữ liệu mẫu