sql >> Database >  >> RDS >> PostgreSQL

Mogelijke uitleg over WITH RECURSIEVE Query Postgres

Dit wordt een algemene tabeluitdrukking genoemd en is een manier om een ​​recursieve query in SQL uit te drukken:

t(n) definieert de naam van de CTE als t , met een enkele kolom met de naam n . Het is vergelijkbaar met een alias voor een afgeleide tabel:

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

De recursie begint met de waarde 1 (dat zijn de values (1) part) en voegt er vervolgens recursief één aan toe totdat de 99 is bereikt. Dus het genereert de getallen van 1 tot 99. Dan somt de laatste vraag al die getallen op.

n is een kolomnaam, niet een "variabele" en de "toewijzing" gebeurt op dezelfde manier als het ophalen van gegevens.

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;

Als je de recursie "uitrolt" (wat in feite een iteratie is), krijg je zoiets als dit:

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)

Meer details in de handleiding:
https://www .postgresql.org/docs/current/static/queries-with.html



  1. Moet ik mijn innodb_buufer_pool _size/RAM opofferen om ruimte te maken voor query_cache_size ?

  2. Oracle:snelste manier in PL/SQL om te zien of waarde bestaat:lijst, VARRAY of tijdelijke tabel

  3. nodejs mysql Fout:Verbinding verbroken De server heeft de verbinding verbroken

  4. Werkt Dapper op Mono?