Search Our Knowledge Base…

Search Our Knowledge Base…

Data Engineering

Alles, was Sie über rekursive CTEs in SQL wissen müssen

Alles, was Sie über rekursive CTEs in SQL wissen müssen

Learn how Recursive CTEs work in SQL and how they help you query hierarchical or sequential data efficiently.

Learn how Recursive CTEs work in SQL and how they help you query hierarchical or sequential data efficiently.

Verfasst von: Sajagan Thirugnanam and Austin Levine

Zuletzt aktualisiert am 6. Oktober 2024

Der Zweck dieses Artikels ist es, Ihnen ein tiefes Verständnis dafür zu vermitteln, wie rekursive Tabellen funktionieren. Nach dem Lesen dieses Artikels sollten Sie in der Lage sein, eine rekursive Tabelle zu erstellen und ein umfassendes Verständnis der zugrunde liegenden Logik zu haben.

Definition von CTE

Zunächst einmal müssen wir sicherstellen, dass Sie verstehen, wofür CTE steht, bevor wir uns in die Welt der rekursiven CTEs stürzen. CTE steht für Common Table Expression, was eine temporäre Ergebnismenge darstellt. Es ist in Bezug auf die Logik einer Unterabfrage ähnlich, jedoch viel einfacher zu lesen.

Sie können eine CTE mit der WITH-Klausel definieren. Auf die WITH-Klausel folgt eine Liste von einer oder mehreren CTEs, von denen jede durch eine SELECT-Anweisung definiert wird.

Es gibt zwei Arten von CTEs: nicht-rekursive CTEs und rekursive CTEs. Lassen Sie uns diese separat erkunden.

Nicht-rekursive CTE

Die allgemeine Form, die wir zuvor beschrieben haben, bezieht sich hauptsächlich auf nicht-rekursive CTEs. Zur Wiederholung: Es beginnt mit dem Schlüsselwort "WITH." Dann geben Sie Ihrer CTE einen Namen, gefolgt vom Schlüsselwort "AS", und definieren die CTE in Klammern. Der zweite Teil der Syntax besteht aus einer einfachen SELECT-Anweisung, die direkt nach der rekursiven CTE geschrieben wird, ohne Kommata, Semikolons oder ähnliche Satzzeichen. Wie bereits erwähnt, wird die CTE in einer anderen Abfrage wie jede andere Tabelle verwendet, und genau das erreicht die SELECT-Anweisung. Hier ist die allgemeine Syntax:

WITH cte_name AS (cte_query_definition) SELECT * FROM cte_name;

Quelle: mariadb.com

Und hier ist ein Beispiel:

WITH recent_orders AS ( SELECT customer_id, order_date FROM orders WHERE order_date >= CURRENT_DATE - INTERVAL 1 MONTH ) SELECT customer_id, COUNT(*) AS num_orders FROM recent_orders GROUP BY customer_id

Rekursive CTE

Der Hauptunterschied einer rekursiven CTE besteht darin, dass sie sich in der SELECT-Anweisung auf sich selbst bezieht und letztendlich eine Schleife erstellt. Abgesehen davon ist die allgemeine Syntax die gleiche, mit der Ausnahme, dass nach der WITH-Klausel auch das Wort RECURSIVE hinzugefügt werden muss. Wenn es das tut, wiederholt es sich ständig selbst und stoppt nur, wenn alle Ergebnisse zurückgegeben wurden.

WITH RECURSIVE cte_name AS ( cte_query_definition (das Anker-Mitglied) UNION ALL cte_query_definition (das rekursive Mitglied) ) SELECT * FROM   cte_name;

Der Hauptzweck von rekursiven CTEs ist die Verwendung, wenn Sie hierarchische Daten abfragen müssen. Ein gutes Beispiel wäre eine Mitarbeitertabelle, bei der die Hierarchie jedes Mitarbeiters basierend auf seinen Vorgesetzten ermittelt werden soll. Angenommen, wir haben eine Mitarbeitertabelle, die folgende Informationen enthält:

  • employee_id

  • manager_id

  • name

WITH RECURSIVE company_hierarchy AS ( SELECT employee_id, manager_id, name, 1 FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.employee_id, e.manager_id, e.name, ch.level + 1 FROM employees e JOIN company_hierarchy ch ON e.manager_id = ch.employee_id ) SELECT * FROM company_hierarchy;

Das Endergebnis der obigen Tabelle wäre eine Tabelle mit allen Mitarbeitern, ihren jeweiligen Managern sowie ihren Namen und der Hierarchieebene.

Rekursive CTEs können verwendet werden, um eine Vielzahl von Problemen zu lösen, wie zum Beispiel:

  • Durchlaufen hierarchischer Datenstrukturen

  • Finden aller Pfade zwischen zwei Knoten in einem Diagramm

  • Berechnung transitiver Beziehungen

  • Berechnung kumulativer Summen

Zusammenfassend lässt sich sagen, dass rekursive Common Table Expressions (CTEs) in SQL eine Welt von Möglichkeiten für die Handhabung hierarchischer Datenstrukturen und die Lösung komplexer Probleme mit eleganten, effizienten Lösungen eröffnen.

Want Power BI expertise in-house?

Get in Touch With Us

Turn your team into Power BI pros and establish reliable, company-wide reporting.

Berlin, DE

powerbi@casewhen.co

Follow us on

Want Power BI expertise in-house?

Get in Touch With Us

Turn your team into Power BI pros and establish reliable, company-wide reporting.

Berlin, DE

powerbi@casewhen.co

Follow us on

Want Power BI expertise in-house?

Get in Touch With Us

Turn your team into Power BI pros and establish reliable, company-wide reporting.

Berlin, DE

powerbi@casewhen.co

Follow us on

© 2025 CaseWhen Consulting

© 2025 CaseWhen Consulting

© 2025 CaseWhen Consulting