sql >> Databáze >  >> RDS >> PostgreSQL

Možné vysvětlení na WITH RECURSIVE Query Postgres

To se nazývá společný tabulkový výraz a je to způsob vyjádření rekurzivního dotazu v SQL:

t(n) definuje název CTE jako t s jedním sloupcem s názvem n . Je to podobné jako alias pro odvozenou tabulku:

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

Rekurze začíná hodnotou 1 (to jsou values (1) část) a poté k ní rekurzivně přidává jednu, dokud není dosaženo 99. Vygeneruje tedy čísla od 1 do 99. Poté závěrečný dotaz sečte všechna tato čísla.

n je název sloupce, ne "proměnná" a "přiřazení" se děje stejným způsobem jako jakékoli získávání dat.

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;

Pokud „rozbalíte“ rekurzi (což je ve skutečnosti iterace), skončíte s něčím takovým:

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)

Více podrobností v manuálu:
https://www .postgresql.org/docs/current/static/queries-with.html



  1. sloupce v věšteckém pivotu

  2. MENŠÍ NEŽ ROVNO V Oracle SQL

  3. Odraz v PLSQL?

  4. Použitý typ tabulky nepodporuje SPATIAL indexy