Läs PostgreSQL rekursiv fråga genom exempel

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:

  1. kör den icke-rekursiva termen för att skapa basresultatuppsättningen (R0).
  2. utför rekursiv term med Ri som ingång för att returnera resultatuppsättningen Ri+1 som utgång.
  3. Upprepa steg 2 tills en tom uppsättning returneras. (avslutningskontroll)
  4. 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

Lämna ett svar

Din e-postadress kommer inte publiceras.

Previous post Shen Länge Återuppstod!
Next post Hur man installerar PuTTY på Linux