Shrnutí: v tomto tutoriálu, se dozvíte o PostgreSQL rekurzivní dotaz pomocí rekurzivní společné tabulka výrazů, nebo CTEs.
Úvod do PostgreSQL rekurzivní dotaz
PostgreSQL poskytuje WITH
prohlášení, že umožňuje postavit pomocné výroky pro použití v dotazu.
tyto příkazy jsou často označovány jako běžné tabulkové výrazy nebo CTE. CTE jsou jako dočasné tabulky, které existují pouze během provádění dotazu.
rekurzivní dotaz je dotaz, který odkazuje na rekurzivní CTE. Rekurzivní dotazy jsou užitečné v mnoha situacích, jako je dotazování hierarchických dat, jako je organizační struktura, kusovník atd.
ilustruje následující syntaxi rekurzivní CTE:
Code language: SQL (Structured Query Language) (sql)
rekurzivní CTE má tři prvky:
- Non-rekurzivní výraz: non-rekurzivní termín je definice dotazu CTE, které tvoří základní sadu výsledků CTE struktury.
- rekurzivní termín: rekurzivní termín je jedna nebo více definic dotazu CTE spojených s nerekurzivním termínem pomocí operátora UNION nebo
UNION ALL
. Rekurzivní termín odkazuje na samotný název CTE. - kontrola ukončení: rekurze se zastaví, když se z předchozí iterace nevrátí žádné řádky.
PostgreSQL provede rekurzivní CTE v následujícím pořadí:
- Provedení non-rekurzivní horizontu vytvořit základní sadu výsledků (R0).
- Spustit rekurzivní termín s Ri jako vstupní vrátit sadu výsledků Ri+1 jako výstup.
- opakujte krok 2, dokud se nevrátí prázdná sada. (ukončení kontroly),
- Návrat nastavte konečný výsledek, že je UNIE nebo
UNION ALL
výsledek nastavení R0, R1, … Rn
PostgreSQL rekurzivní dotaz příklad
vytvoříme novou tabulku k prokázání PostgreSQL rekurzivní dotaz.
Code language: SQL (Structured Query Language) (sql)
tabulka employees
má tři sloupce: employee_id
, manager_id
a full_name
. Sloupec manager_id
určuje ID manažera zaměstnance.
následující příkaz vloží vzorová data do tabulky employees
.
Code language: PHP (php)
následující dotaz vrátí všechny podřízené manažera s id 2.
Code language: SQL (Structured Query Language) (sql)
Jak to funguje:
- rekurzivní CTE, podřízených, definuje jeden non-rekurzivní termín a jeden rekurzivní termín.
- non-rekurzivní termín vrací základní výsledkovou sadu R0, která je zaměstnancem s id 2.
Code language: SQL (Structured Query Language) (sql)
rekurzivní termín vrací přímé podřízené(podřízené) ID zaměstnance 2. To je výsledek spojení mezi tabulkou zaměstnanců a podřízenými CTE. První iterace rekurzivního výrazu vrací následující sadu výsledků:
Code language: SQL (Structured Query Language) (sql)
PostgreSQL provádí rekurzivní termín opakovaně. Druhá iterace rekurzivní člen používá sadu výsledků výše uvedeném kroku jako vstupní hodnotu a vrátí tuto sada výsledků:
Code language: SQL (Structured Query Language) (sql)
třetí iterace vrátí sadu výsledků prázdné, protože tam je žádný zaměstnanec podávání zpráv pro zaměstnance s id 16, 17, 18, 19, a 20.
PostgreSQL vrací konečný výsledek nastavit, že je unie všechny sady výsledků v první a druhé iterace generované non-rekurzivní a rekurzivní podmínek.
v tomto tutoriálu jste se naučili používat rekurzivní CTE k vytvoření rekurzivních dotazů PostgreSQL.
- byl tento návod užitečný ?
- YesNo