Dit wordt een algemene tabeluitdrukking genoemd en is een manier om een recursieve query in SQL uit te drukken:
t(n)
definieert de naam van de CTE als t
, met een enkele kolom met de naam n
. Het is vergelijkbaar met een alias voor een afgeleide tabel:
select ...
from (
...
) as t(n);
De recursie begint met de waarde 1 (dat zijn de values (1)
part) en voegt er vervolgens recursief één aan toe totdat de 99 is bereikt. Dus het genereert de getallen van 1 tot 99. Dan somt de laatste vraag al die getallen op.
n
is een kolomnaam, niet een "variabele" en de "toewijzing" gebeurt op dezelfde manier als het ophalen van gegevens.
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;
Als je de recursie "uitrolt" (wat in feite een iteratie is), krijg je zoiets als dit:
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)
Meer details in de handleiding:
https://www .postgresql.org/docs/current/static/queries-with.html