Dies wird als allgemeiner Tabellenausdruck bezeichnet und ist eine Möglichkeit, eine rekursive Abfrage in SQL auszudrücken:
t(n)
definiert den Namen des CTE als t
, mit einer einzelnen Spalte namens n
. Es ähnelt einem Alias für eine abgeleitete Tabelle:
select ...
from (
...
) as t(n);
Die Rekursion beginnt mit dem Wert 1 (das sind die values (1)
Teil) und addiert dann rekursiv eins dazu, bis die 99 erreicht ist. Es generiert also die Zahlen von 1 bis 99. Dann summiert die letzte Abfrage alle diese Zahlen.
n
ein Spaltenname ist, nicht eine "Variable" und die "Zuweisung" geschieht wie jeder Datenabruf.
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;
Wenn Sie die Rekursion "entrollen" (was eigentlich eine Iteration ist), würden Sie am Ende so etwas wie das hier sehen:
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)
Weitere Details im Handbuch:
https://www .postgresql.org/docs/current/static/queries-with.html