sammanfattning: i den här handledningen lär du dig om PostgreSQL rekursiv fråga med hjälp av rekursiva vanliga tabeluttryck eller CTE.
introduktion till PostgreSQL rekursiv fråga
PostgreSQL tillhandahåller WITH
– satsen som låter dig konstruera hjälpsatser för användning i en fråga.
dessa uttalanden kallas ofta vanliga tabelluttryck eller CTE. CTE: erna är som tillfälliga tabeller som endast finns under utförandet av frågan.
en rekursiv fråga är en fråga som refererar till en rekursiv CTE. De rekursiva frågorna är användbara i många situationer som att fråga hierarkiska data som organisationsstruktur, materialförteckning etc.
följande illustrerar syntaxen för en rekursiv CTE:
Code language: SQL (Structured Query Language) (sql)
en rekursiv CTE har tre element:
- icke-rekursiv term: den icke-rekursiva termen är en CTE-frågedefinition som utgör basresultatuppsättningen för CTE-strukturen.
- rekursiv term: den rekursiva termen är en eller flera CTE-frågedefinitioner förenade med den icke-rekursiva termen med operatorn UNION eller
UNION ALL
. Den rekursiva termen refererar till själva CTE-namnet. - Termineringskontroll: rekursionen stannar när inga rader returneras från föregående iteration.
PostgreSQL utför en rekursiv CTE i följande sekvens:
- kör den icke-rekursiva termen för att skapa basresultatuppsättningen (R0).
- utför rekursiv term med Ri som ingång för att returnera resultatuppsättningen Ri+1 som utgång.
- Upprepa steg 2 tills en tom uppsättning returneras. (avslutningskontroll)
- returnera den slutliga resultatuppsättningen som är en UNION eller
UNION ALL
av resultatuppsättningen R0, R1, … Rn
PostgreSQL rekursiv fråga exempel
vi skapar en ny tabell för att visa PostgreSQL rekursiv fråga.
Code language: SQL (Structured Query Language) (sql)
tabellen employees
har tre kolumner: employee_id
, manager_id
och full_name
. Kolumnen manager_id
anger chefs-id för en anställd.
följande uttalande infogar exempeldata i tabellen employees
.
Code language: PHP (php)
följande fråga returnerar alla underordnade i hanteraren med id 2.
Code language: SQL (Structured Query Language) (sql)
hur det fungerar:
- den rekursiva CTE, underordnade, definierar en icke-rekursiv term och en rekursiv term.
- den icke-rekursiva termen returnerar basresultatuppsättningen R0 som är den anställde med id 2.
Code language: SQL (Structured Query Language) (sql)
den rekursiva termen returnerar de direkta underordnade (s) av anställd id 2. Detta är resultatet av att man går mellan medarbetarbordet och underordnade CTE. Den första iterationen av den rekursiva termen returnerar följande resultatuppsättning:
Code language: SQL (Structured Query Language) (sql)
PostgreSQL utför den rekursiva termen upprepade gånger. Den andra iterationen av den rekursiva medlemmen använder resultatuppsättningen ovan Steg som ingångsvärde och returnerar denna resultatuppsättning:
Code language: SQL (Structured Query Language) (sql)
den tredje iterationen returnerar en tom resultatuppsättning eftersom det inte finns någon anställd som rapporterar till arbetstagaren med id 16, 17, 18, 19 och 20.
PostgreSQL returnerar den slutliga resultatuppsättningen som är föreningen av alla resultatuppsättningar i den första och andra iterationen som genereras av de icke-rekursiva och rekursiva termerna.
i denna handledning har du lärt dig hur du använder rekursiva CTEs för att konstruera PostgreSQL rekursiva frågor.
- var denna handledning till hjälp ?
- Janej