PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Possibile spiegazione su CON RICORSIVA Query Postgres

Questa è chiamata espressione di tabella comune ed è un modo per esprimere una query ricorsiva in SQL:

t(n) definisce il nome del CTE come t , con una singola colonna denominata n . È simile a un alias per una tabella derivata:

select ... 
from (
  ...
) as t(n);

La ricorsione inizia con il valore 1 (che sono i values (1) parte) e poi ricorsivamente ne aggiunge uno fino a raggiungere il 99. Quindi genera i numeri da 1 a 99. Quindi la query finale riassume tutti quei numeri.

n è il nome di una colonna, non una "variabile" e l'"assegnazione" avvengono allo stesso modo di qualsiasi recupero di dati.

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;

Se "svolgi" la ricorsione (che in realtà è un'iterazione), ti ritroverai con qualcosa del genere:

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)

Maggiori dettagli nel manuale:
https://www. .postgresql.org/docs/current/static/queries-with.html