PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Възможно обяснение на WITH RECURSIVE Query Postgres

Това се нарича израз на обща таблица и е начин за изразяване на рекурсивна заявка в SQL:

t(n) дефинира името на CTE като t , с една колона с име n . Подобно е на псевдоним за производна таблица:

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

Рекурсията започва със стойност 1 (това са values (1) част) и след това рекурсивно добавя единица към него, докато се достигне 99. Така той генерира числата от 1 до 99. След това последната заявка сумира всички тези числа.

n е име на колона, а не "променлива" и "присвояването" се случва по същия начин като всяко извличане на данни.

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;

Ако „разгърнете“ рекурсията (която всъщност е итерация), тогава ще получите нещо подобно:

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)

Повече подробности в ръководството:
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. Грешка в сокета Postgresql на OSX 10.7.3 при стартиране на syncdb на Django

  2. Намерете името на хоста в postgresql

  3. Експортирайте конкретни редове от PostgreSQL таблица като INSERT SQL скрипт

  4. jooq - проблем с разпознаването на postgres UNIQUE ограничение

  5. Как да инсталирате PostgreSQL клиентска библиотека за PHP на Windows с активиран SSL