Podsumowanie: w tym samouczku dowiesz się o rekurencyjnym zapytaniu PostgreSQL przy użyciu rekurencyjnych wspólnych wyrażeń tabel lub CTE.
Wprowadzenie do rekurencyjnego zapytania PostgreSQL
PostgreSQL udostępnia instrukcję WITH
, która pozwala na konstruowanie instrukcji pomocniczych do użycia w zapytaniu.
te stwierdzenia są często określane jako wspólne wyrażenia tabeli lub CTE. CTE są jak tymczasowe tabele, które istnieją tylko podczas wykonywania zapytania.
zapytanie rekurencyjne to zapytanie, które odnosi się do rekurencyjnego CTE. Rekurencyjne zapytania są przydatne w wielu sytuacjach, takich jak zapytania o hierarchiczne dane, takie jak struktura organizacyjna, zestawienie materiałów itp.
Poniżej przedstawiono składnię rekurencyjnego CTE:
Code language: SQL (Structured Query Language) (sql)
rekurencyjny CTE ma trzy elementy:
- termin nie-rekurencyjny: termin nie-rekurencyjny jest definicją kwerendy CTE, która tworzy podstawowy zestaw wyników struktury CTE.
- : termin rekurencyjny to jedna lub więcej definicji kwerend CTE połączonych z terminem rekurencyjnym przy użyciu operatora UNION lub
UNION ALL
. Termin rekurencyjny odnosi się do samej nazwy CTE. - Kontrola zakończenia: rekurencja zatrzymuje się, gdy nie zostaną zwrócone żadne wiersze z poprzedniej iteracji.
PostgreSQL wykonuje rekurencyjny CTE w następującej kolejności:
- Wykonaj nie-rekurencyjny termin, aby utworzyć zestaw wyników bazowych (R0).
- wykonuj rekurencyjny termin z RI jako wejściem, aby zwrócić wynik ri+1 jako wyjście.
- Powtórz krok 2, dopóki nie zostanie zwrócony pusty zestaw. (Kontrola zakończenia)
- zwróć końcowy zestaw wyników, który jest związkiem lub
UNION ALL
zbioru wyników R0, R1, … Rn
przykład zapytania rekurencyjnego PostgreSQL
utworzymy nową tabelę, aby zademonstrować zapytanie rekurencyjne PostgreSQL.
Code language: SQL (Structured Query Language) (sql)
employees
tabela ma trzy kolumny: employee_id
, manager_id
i full_name
. Kolumna manager_id
określa identyfikator menedżera pracownika.
poniższe polecenie wstawia przykładowe dane do tabeli employees
.
Code language: PHP (php)
poniższe zapytanie zwraca wszystkich podwładnych menedżera o id 2.
Code language: SQL (Structured Query Language) (sql)
Jak to działa:
- CTE rekurencyjne, podporządkowane, definiuje jeden termin rekurencyjny i jeden termin rekurencyjny.
- termin rekurencyjny zwraca wynik bazowy zbioru R0, który jest pracownikiem o id 2.
Code language: SQL (Structured Query Language) (sql)
rekurencyjny termin zwraca bezpośrednie podwładne(podwładne) identyfikatora pracownika 2. Jest to wynik połączenia tabeli pracowników z CTE podwładnych. Pierwsza iteracja wyrażenia rekurencyjnego zwraca następujący zbiór wyników:
Code language: SQL (Structured Query Language) (sql)
PostgreSQL wykonuje rekurencyjny termin wielokrotnie. Druga iteracja elementu rekurencyjnego wykorzystuje wynik ustawiony powyżej kroku jako wartość wejściową i zwraca ten zestaw wyników:
Code language: SQL (Structured Query Language) (sql)
trzecia iteracja zwraca pusty zestaw wyników, ponieważ nie ma pracownika zgłaszającego się do pracownika o id 16, 17, 18, 19 i 20.
PostgreSQL zwraca końcowy zestaw wyników, który jest połączeniem wszystkich zestawów wyników w pierwszej i drugiej iteracji wygenerowanych przez Warunki rekurencyjne i rekurencyjne.
w tym samouczku nauczyłeś się, jak używać rekurencyjnych CTE do konstruowania zapytań rekurencyjnych PostgreSQL.
- czy ten samouczek był pomocny ?
- YesNo