Ini disebut ekspresi tabel umum dan merupakan cara untuk mengekspresikan kueri rekursif dalam SQL:
t(n)
mendefinisikan nama CTE sebagai t
, dengan satu kolom bernama n
. Ini mirip dengan alias untuk tabel turunan:
select ...
from (
...
) as t(n);
Rekursi dimulai dengan nilai 1 (itulah values (1)
bagian) dan kemudian secara rekursif menambahkan satu sampai 99 tercapai. Jadi itu menghasilkan angka dari 1 hingga 99. Kemudian kueri terakhir kemudian menjumlahkan semua angka itu.
n
adalah nama kolom, bukan "variabel" dan "penugasan" terjadi dengan cara yang sama seperti pengambilan data apa pun.
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;
Jika Anda "membuka gulungan" rekursi (yang sebenarnya merupakan iterasi) maka Anda akan mendapatkan sesuatu seperti ini:
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)
Detail lebih lanjut dalam manual:
https://www .postgresql.org/docs/current/static/queries-with.html