PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Possível explicação sobre COM RECURSIVE Query Postgres


Isso é chamado de expressão de tabela comum e é uma maneira de expressar uma consulta recursiva em SQL:

t(n) define o nome do CTE como t , com uma única coluna chamada n . É semelhante a um alias para uma tabela derivada:
select ... 
from (
  ...
) as t(n);

A recursão começa com o valor 1 (que são os values (1) parte) e, em seguida, adiciona um recursivamente até que o 99 seja alcançado. Então ele gera os números de 1 a 99. Então a consulta final soma todos esses números.

n é um nome de coluna, não uma "variável" e a "atribuição" acontece da mesma forma que qualquer recuperação de dados.
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 você "desenrolar" a recursão (que na verdade é uma iteração), você terminará com algo assim:
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)

Mais detalhes no manual:
https://www .postgresql.org/docs/current/static/queries-with.html