Heim >Datenbank >MySQL-Tutorial >Wie kann ich in SQLite3 rekursive Abfragen durchführen, um hierarchische Daten abzurufen?

Wie kann ich in SQLite3 rekursive Abfragen durchführen, um hierarchische Daten abzurufen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 13:32:21386Durchsuche

How Can I Perform Recursive Queries in SQLite3 to Retrieve Hierarchical Data?

Rekursive Abfragen in SQLite3

In SQLite3 ist es möglich, rekursive Abfragen auszuführen, um hierarchische Daten aus einer Tabelle abzurufen, die Eltern-Kind-Tabellen enthält Beziehungen, wie z. B. das Finden aller Unterteile eines bestimmten Oberteils. Um dies zu erreichen, können Sie die WITH RECURSIVE-Syntax verwenden, die in SQLite3-Versionen 3.8.3 und höher unterstützt wird.

WITH RECURSIVE SubParts AS (
  SELECT Part, SuperPart, 1 AS Level
  FROM Part
  WHERE SuperPart = 'eZ00'
  UNION ALL
  SELECT p.Part, p.SuperPart, s.Level + 1
  FROM Part AS p
  JOIN SubParts AS s ON p.SuperPart = s.Part
)
SELECT * FROM SubParts;

Die WITH RECURSIVE-Anweisung erstellt eine temporäre Tabelle namens SubParts, die die ursprüngliche Zeile und a enthält Spalte mit dem Namen „Level“, die für die übergeordnete Zeile auf 1 initialisiert wird. Die UNION ALL-Klausel führt den rekursiven Schritt aus, indem sie Zeilen auswählt, die den Unterteilen der aktuellen Zeile entsprechen, und die Ebene um 1 erhöht. Die Abfrage gibt dann alle Zeilen aus der SubParts-Tabelle zurück.

Vor SQLite3 3.8.3

Vor SQLite3 Version 3.8.3 gab es keine rekursiven Abfragen unterstützt. Um die Rekursion im Client-Code für eine mehrstufige Hierarchie zu emulieren, führen Sie die folgenden Schritte aus:

  1. Rufen Sie die erste Zeile und ihre Unterteile ab.
  2. Rufen Sie Zeilen und ihre Unterteile iterativ ab, bis keine Zeilen mehr vorhanden sind zurückgegeben.

Das obige ist der detaillierte Inhalt vonWie kann ich in SQLite3 rekursive Abfragen durchführen, um hierarchische Daten abzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn