Durchsuchen Sie unsere Wissensdatenbank…

Durchsuchen Sie unsere Wissensdatenbank…

Dateningenieurwesen

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

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

Erfahren Sie, wie rekursive CTEs in SQL funktionieren und wie sie Ihnen helfen, hierarchische oder sequenzielle Daten effizient abzufragen.

Erfahren Sie, wie rekursive CTEs in SQL funktionieren und wie sie Ihnen helfen, hierarchische oder sequenzielle Daten effizient abzufragen.

Verfasst von: Sajagan Thirugnanam und Austin Levine

Zuletzt aktualisiert am 6. Oktober 2024

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

Definition von CTE

Das Wichtigste zuerst. Bevor wir in die Welt der rekursiven CTEs eintauchen, ist es wichtig sicherzustellen, dass Sie verstehen, wofür CTE steht. CTE ist die Abkürzung für Common Table Expression, die eine temporäre Ergebnismenge darstellt. Sie ist vergleichbar mit einer Unterabfrage in Bezug auf die Logik, jedoch viel einfacher zu lesen.

Sie können eine CTE mit der WITH-Klausel definieren. Der WITH-Klausel folgt eine Liste von einem 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 betrachten.

Nicht-Rekursive CTE

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

WITH cte_name AS (cte_query_definition) SELECT * FROM cte_name;

CTE working

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 selbst referenziert und schließlich eine Schleife erstellt. Abgesehen davon ist die allgemeine Syntax dieselbe., abgesehen von der Tatsache, dass Sie nach der With-Klausel auch das Wort RECURSIVE hinzufügen müssen. Was sie tut, ist, dass sie sich ständig wiederholt und nur stoppt, wenn sie alle Ergebnisse zurückgibt.

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

Der primäre Zweck rekursiver CTEs besteht darin, verwendet zu werden, wenn Sie hierarchische Daten abfragen müssen. Ein gutes Beispiel wäre eine Mitarbeitertabelle zu haben und die Hierarchie jedes Mitarbeiters basierend auf deren Vorgesetzten zu bestimmen. 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 endgültige Ergebnis der obigen Tabelle wäre eine Tabelle mit allen Mitarbeitern und ihren jeweiligen Managern zusammen mit ihren Namen und der Hierarchieebene.

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

  • Durchlaufen von hierarchischen Datenstrukturen

  • Alle Wege zwischen zwei Knoten in einem Graphen finden

  • TRANSITIVE-Beziehungen berechnen

  • Kumulative Gesamtsummen berechnen

Zusammenfassend eröffnen rekursive Common Table Expressions (CTEs) in SQL eine Welt von Möglichkeiten, um hierarchische Datenstrukturen zu verwalten und komplexe Probleme mit eleganten, effizienten Lösungen zu lösen.

Möchten Sie Power BI Expertise im Haus haben?

Kontaktieren Sie uns

Verwandeln Sie Ihr Team in Power BI-Profis und etablieren Sie zuverlässige, unternehmensweite Berichterstattung.

Berlin, DE

powerbi@casewhen.de

Folgen Sie uns auf

Möchten Sie Power BI Expertise im Haus haben?

Kontaktieren Sie uns

Verwandeln Sie Ihr Team in Power BI-Profis und etablieren Sie zuverlässige, unternehmensweite Berichterstattung.

Berlin, DE

powerbi@casewhen.de

Folgen Sie uns auf

© 2025 CaseWhen Consulting

© 2025 CaseWhen Consulting

© 2025 CaseWhen Consulting