Đây được gọi là một biểu thức bảng chung và là một cách thể hiện một truy vấn đệ quy trong SQL:
t(n)
xác định tên của CTE là t
, với một cột duy nhất có tên n
. Nó tương tự như bí danh cho một bảng dẫn xuất:
select ...
from (
...
) as t(n);
Đệ quy bắt đầu với giá trị 1 (đó là các giá trị values (1)
phần) và sau đó thêm đệ quy một vào nó cho đến khi đạt đến 99. Vì vậy, nó tạo ra các số từ 1 đến 99. Sau đó truy vấn cuối cùng sau đó tính tổng tất cả các số đó.
n
là tên cột, không phải một "biến" và "gán" xảy ra theo cùng một cách với bất kỳ truy xuất dữ liệu nào.
WITH RECURSIVE t(n) AS (
VALUES (1) --<< this is the recursion "root"
UNION ALL
SELECT n+1 FROM t WHERE n < 100 --<< this is the "recursive part"
)
SELECT sum(n) FROM t;
Nếu bạn "giải nén" đệ quy (thực chất là một phép lặp) thì bạn sẽ kết thúc với một cái gì đó như thế này:
select x.n + 1
from (
select x.n + 1
from (
select x.n + 1
from (
select x.n + 1
from (
values (1)
) as x(n)
) as x(n)
) as x(n)
) as x(n)
Thông tin chi tiết trong sách hướng dẫn:
https:// www .postgresql.org / docs / current / static / queries-with.html