これは共通テーブル式と呼ばれ、SQLで再帰クエリを表現する方法です:
t(n)
CTEの名前をt
として定義します 、n
という名前の単一の列 。これは、派生テーブルのエイリアスに似ています:
select ...
from (
...
) as t(n);
再帰は値1(つまり、values (1)
から始まります。 パート)そして、99に達するまで再帰的に1を追加します。したがって、1から99までの数値が生成されます。次に、最後のクエリでそれらすべての数値が合計されます。
n
は列名であり、ではありません 「変数」と「割り当て」は、他のデータ取得と同じ方法で行われます。
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;
再帰を「展開」すると(実際には反復です)、次のようになります。
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)
マニュアルの詳細:
https:// www .postgresql.org / docs / current / static / queries-with.html