Použijte klíčové slovo WITH
jednou Nahoře. Pokud jsou některé z vašich běžných tabulkových výrazů (CTE) rekurzivní (rCTE), musíte přidat klíčové slovo RECURSIVE
nahoře jednou také, i když ne všechny CTE jsou rekurzivní:
WITH RECURSIVE
cte1 AS (...) -- can still be non-recursive
, cte2 AS (SELECT ...
UNION ALL
SELECT ...) -- recursive term
, cte3 AS (...)
SELECT ... FROM cte3 WHERE ...
Manuál:
Pokud
RECURSIVE
je zadáno, umožňuje aSELECT
poddotaz, který se bude odkazovat jménem.
Odvážný důraz můj. A ještě pronikavější:
Další efekt
RECURSIVE
je toWITH
dotazy není třeba objednávat :Dotaz může odkazovat na jiný, který je později v seznamu. (Nicméně kruhové odkazy nebo vzájemná rekurze nejsou implementovány.)BezRECURSIVE
,WITH
dotazy mohou odkazovat pouze na sourozenceWITH
dotazy, které jsou dříve vWITH
seznam.
Opět odvážný důraz můj. To znamená, že pořadí WITH
klauzule je bezvýznamná při RECURSIVE
bylo použito klíčové slovo.
BTW, protože cte1
a cte2
v příkladu nejsou odkazovány ve vnějším SELECT
a jsou prosté SELECT
samotné příkazy (žádné vedlejší efekty), nejsou nikdy provedeny (pokud nejsou uvedeny v cte3
).