Sammendrag: I denne opplæringen vil du lære Om PostgreSQL rekursiv spørring ved hjelp av rekursive vanlige tabelluttrykk eller Cte.
Introduksjon Til PostgreSQL rekursiv spørring
PostgreSQL gir WITH
– setningen som lar deg konstruere hjelpesetninger for bruk i en spørring.
disse uttalelsene blir ofte referert til som vanlige tabelluttrykk eller Cte. Cte er som midlertidige tabeller som bare eksisterer under utførelsen av spørringen.
en rekursiv spørring er en spørring som refererer til en rekursiv CTE. Rekursive spørringer er nyttige i mange situasjoner som spørring hierarkiske data som organisasjonsstruktur, stykkliste, etc.
følgende illustrerer syntaksen til en rekursiv CTE:
Code language: SQL (Structured Query Language) (sql)
en rekursiv CTE har tre elementer:
- Ikke-rekursiv term: den ikke-rekursive termen er EN cte-spørringsdefinisjon som danner basisresultatsettet TIL CTE-strukturen.
- Rekursiv term: rekursiv term er en ELLER flere cte-spørringsdefinisjoner sammen med den ikke-rekursive termen ved hjelp av UNIONSOPERATOREN eller
UNION ALL
. Den rekursive termen refererer TIL SELVE CTE-navnet. - Avslutningskontroll: rekursjonen stopper når ingen rader returneres fra forrige iterasjon.
PostgreSQL utfører en rekursiv CTE i følgende rekkefølge:
- Utfør den ikke-rekursive termen for å opprette basisresultatsettet (R0).
- Utfør rekursiv term med Ri som inngang for å returnere resultatsettet Ri+1 som utgang.
- Gjenta trinn 2 til et tomt sett returneres. (avslutningssjekk)
- Returner det endelige resultatsettet som er EN UNION eller
UNION ALL
av resultatsettet R0, R1, … Rn
postgresql rekursiv spørring eksempel
vi vil opprette en ny tabell for å demonstrere postgresql rekursiv spørring.
Code language: SQL (Structured Query Language) (sql)
tabellen employees
har tre kolonner: employee_id
, manager_id
og full_name
. Kolonnen manager_id
angir leder-iden til en ansatt.
følgende setning setter inn eksempeldata i tabellen employees
.
Code language: PHP (php)
følgende spørring returnerer alle underordnede av lederen med id 2.
Code language: SQL (Structured Query Language) (sql)
slik fungerer det:
- den rekursive cte, underordnede, definerer en ikke-rekursiv term og en rekursiv term.
- den ikke-rekursive termen returnerer basisresultatsettet R0 som er ansatt med id 2.
Code language: SQL (Structured Query Language) (sql)
rekursiv term returnerer de direkte underordnede (e) av ansatt-id 2. Dette er resultatet av å bli med mellom ansatte bordet og underordnede CTE. Den første iterasjonen av den rekursive termen returnerer følgende resultatsett:
Code language: SQL (Structured Query Language) (sql)
PostgreSQL utfører rekursiv term gjentatte ganger. Den andre iterasjonen av det rekursive medlemmet bruker resultatsettet over trinn som inngangsverdi, og returnerer dette resultatsettet:
Code language: SQL (Structured Query Language) (sql)
den tredje iterasjonen returnerer et tomt resultatsett fordi det ikke er ansatt rapportering til ansatt med id 16, 17, 18, 19 og 20.
PostgreSQL returnerer det endelige resultatsettet som er foreningen av alle resultatsettene i den første og andre iterasjonen generert av de ikke-rekursive og rekursive termene.
i denne opplæringen har du lært hvordan du bruker rekursive CTEs til å konstruere PostgreSQL rekursive spørringer.
- Var denne opplæringen nyttig ?
- YesNo