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
RECURSIVEje zadáno, umožňuje aSELECTpoddotaz, který se bude odkazovat jménem.
Odvážný důraz můj. A ještě pronikavější:
Další efekt
RECURSIVEje toWITHdotazy 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,WITHdotazy mohou odkazovat pouze na sourozenceWITHdotazy, které jsou dříve vWITHseznam.
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 ).