sql >> Databasteknik >  >> RDS >> PostgreSQL

Möjlig förklaring på MED RECURSIVE Query Postgres

Detta kallas ett vanligt tabelluttryck och är ett sätt att uttrycka en rekursiv fråga i SQL:

t(n) definierar namnet på CTE som t , med en enda kolumn som heter n . Det liknar ett alias för en härledd tabell:

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

Rekursionen börjar med värdet 1 (det är values (1) del) och lägger sedan rekursivt till en till den tills 99 nås. Så den genererar siffrorna från 1 till 99. Sedan summerar den slutliga frågan alla dessa siffror.

n är ett kolumnnamn, inte en "variabel" och "tilldelningen" sker på samma sätt som all datahämtning.

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;

Om du "rullar upp" rekursionen (som i själva verket är en iteration) så skulle du sluta med något sånt här:

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)

Mer information i manualen:
https://www. .postgresql.org/docs/current/static/queries-with.html



  1. visar mysql enum-värden i php

  2. Databasen "xxx" kan inte öppnas eftersom den är version 904

  3. Kör sql-skript med ömsesidigt beroende

  4. MySQL PDO - Ställa in standard hämtningsläge?