PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Możliwe wyjaśnienie dotyczące Z REKURSIVE Query Postgres

Nazywa się to zwykłym wyrażeniem tabelowym i jest sposobem wyrażenia rekurencyjnego zapytania w SQL:

t(n) definiuje nazwę CTE jako t , z pojedynczą kolumną o nazwie n . Jest podobny do aliasu tabeli pochodnej:

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

Rekurencja zaczyna się od wartości 1 (to są values (1) część), a następnie rekursywnie dodaje do niego jeden, aż do osiągnięcia 99. Generuje więc liczby od 1 do 99. Następnie końcowe zapytanie sumuje wszystkie te liczby.

n to nazwa kolumny, nie „zmienna” i „przypisanie” odbywają się w taki sam sposób, jak każde pobieranie danych.

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;

Jeśli „rozwiniesz” rekursję (która w rzeczywistości jest iteracją), otrzymasz coś takiego:

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)

Więcej szczegółów w instrukcji:
https://www .postgresql.org/docs/current/static/queries-with.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql ORDER BY wiele wartości w określonej kolejności?

  2. Serwery rozproszone geograficznie, PostgreSQL i JPA

  3. Jak ręcznie skonfigurować i uruchomić PostgreSQL w systemie Windows?

  4. Problem z wyrażeniem regularnym Postgres

  5. Jaka jest komenda, aby znaleźć skrypt istniejącej funkcji w postgresql?