sql >> Database teknologi >  >> RDS >> PostgreSQL

Mulig forklaring på MED RECURSIVE Query Postgres

Dette kaldes et almindeligt tabeludtryk og er en måde at udtrykke en rekursiv forespørgsel på i SQL:

t(n) definerer navnet på CTE'en som t , med en enkelt kolonne med navnet n . Det ligner et alias for en afledt tabel:

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

Rekursionen starter med værdien 1 (det er values (1) del) og føjer derefter en rekursivt til den, indtil 99 er nået. Så den genererer tallene fra 1 til 99. Derefter opsummerer den sidste forespørgsel alle disse tal.

n er et kolonnenavn, ikke en "variabel", og "tildelingen" sker på samme måde som enhver datahentning.

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;

Hvis du "ruller ud" rekursionen (som faktisk er en iteration), vil du ende med noget som dette:

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)

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



  1. Hvordan får jeg det aktuelle år ved hjælp af SQL på Oracle?

  2. Kompleks php mysqli-forespørgsel for at indsætte data, hvis de ikke eksisterer:får duplikat kolonnenavn '?'

  3. Hvordan får man alle privilegier tilbage til root-brugeren i MySQL?

  4. Sådan sammenlignes to tabeller i postgres