sql >> Base de Datos >  >> RDS >> PostgreSQL

Posible explicación sobre CON Consulta RECURSIVA Postgres

Esto se denomina expresión de tabla común y es una forma de expresar una consulta recursiva en SQL:

t(n) define el nombre del CTE como t , con una sola columna llamada n . Es similar a un alias para una tabla derivada:

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

La recursión comienza con el valor 1 (que son los values (1) part) y luego recursivamente le agrega uno hasta que se alcanza el 99. Entonces genera los números del 1 al 99. Luego, la consulta final resume todos esos números.

n es un nombre de columna, no una "variable" y la "asignación" sucede de la misma manera que cualquier recuperación de datos.

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;

Si "desenrolla" la recursividad (que de hecho es una iteración), terminará con algo como esto:

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)

Más detalles en el manual:
https://www .postgresql.org/docs/current/static/queries-with.html