PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Explication possible sur WITH RECURSIVE Query Postgres

C'est ce qu'on appelle une expression de table commune et c'est un moyen d'exprimer une requête récursive en SQL :

t(n) définit le nom du CTE comme t , avec une seule colonne nommée n . C'est similaire à un alias pour une table dérivée :

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

La récursivité commence par la valeur 1 (c'est-à-dire les values (1) partie) puis y ajoute récursivement un jusqu'à ce que le 99 soit atteint. Il génère donc les nombres de 1 à 99. Ensuite, la requête finale résume ensuite tous ces nombres.

n est un nom de colonne, pas une "variable" et l'"affectation" se fait de la même manière que n'importe quelle récupération de données.

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 vous "déroulez" la récursivité (qui est en fait une itération), vous obtiendrez quelque chose comme ceci :

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)

Plus de détails dans le manuel :
https://www .postgresql.org/docs/current/static/queries-with.html