PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Mögliche Erklärung zu WITH RECURSIVE Query Postgres

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