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ộtSELECTtruy 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àWITHkhô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,WITHcác truy vấn chỉ có thể tham chiếu đến anh chị emWITHcác truy vấn trước đó trongWITHdanh 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 ).