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ộtSELECT
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ị emWITH
các truy vấn trước đó trongWITH
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ừ cte1
và cte2
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
).