sql >> Databáze >  >> RDS >> PostgreSQL

Více CTE v jednom dotazu

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 a SELECT poddotaz, který se bude odkazovat jménem.

Odvážný důraz můj. A ještě pronikavější:

Další efekt RECURSIVE je to WITH 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.)Bez RECURSIVE , WITH dotazy mohou odkazovat pouze na sourozence WITH dotazy, které jsou dříve v WITH 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 ).



  1. Spočítejte všechny objekty ve vaší databázi

  2. Co je SQL Operations Studio (SQLOPS)?

  3. SQL Server:převod ((int)rok,(int)měsíc,(int)den) na datum a čas

  4. Jak převést sestavu Microsoft Access do formátu PDF (3 způsoby)