Ich habe zuvor einen Artikel über rekursive Abfragen von Baumstrukturen in MySQL mithilfe benutzerdefinierter Funktionen geschrieben. Seit MySQL 8.0 wird die rekursive Abfragesyntax endlich unterstützt. WAK Lassen Sie uns zunächst verstehen, was CTE ist. Der vollständige Name lautet Common Table Expressions MIT cte1 AS (SELECT a, b FROM table1), cte2 AS (AUSWÄHLEN c, d AUS Tabelle2) WÄHLEN Sie b, d VON cte1 JOIN cte2 WO cte1.a = cte2.c; cte1, cte2 sind die von uns definierten CTEs, auf die in der aktuellen Abfrage verwiesen werden kann Es ist ersichtlich, dass CTE ein temporärer Ergebnissatz ist, ähnlich einer abgeleiteten Tabelle. Der Unterschied zwischen den beiden wird hier nicht im Detail erklärt. Sie können auf die MySQL-Entwicklungsdokumentation verweisen: https://dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive-examples Rekursive Abfrage Sehen wir uns zunächst die Syntax rekursiver Abfragen an. MIT RECURSIVEM cte_name AS ( SELECT ... – gibt den anfänglichen Zeilensatz zurück UNION ALL / UNION DISTINCT SELECT ... – gibt zusätzliche Zeilensätze zurück ) WÄHLEN SIE * VON cte;
Der rekursive Teil darf nicht enthalten:
Die obige Erklärung ist möglicherweise etwas abstrakt, also wollen wir sie langsam anhand von Beispielen verstehen. WITH RECURSIVE cte (n) AS -- Das hier definierte n entspricht dem Spaltennamen des Ergebnissatzes, der auch in der folgenden Abfrage definiert werden kann ( WÄHLEN SIE 1 UNION ALLE Wählen Sie n + 1 aus Tabelle, wobei n < 5 ist. ) WÄHLEN SIE * VON cte; --Ergebnis +------+ | n | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | +------+
BEISPIEL Schauen wir uns abschließend ein Beispiel für eine Baumstruktur an. Tabelle „c_tree“ erstellen ( `id` int(11) NICHT NULL AUTO_INCREMENT, `cname` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `parent_id` int(11) DEFAULT NULL, PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; mysql> wähle * aus c_tree; +----+---------+-----------+ | ID | CName | übergeordnete_ID | +----+---------+-----------+ | 1 | 1 | 0 | | 2 | 2 | 0 | | 3 | 3 | 0 | | 4 | 1-1 | 1 | | 5 | 1-2 | 1 | | 6 | 2-1 | 2 | | 7 | 2-2 | 2 | | 8 | 3-1 | 3 | | 9 | 3-1-1 | 8 | | 10 | 3-1-2 | 8 | | 11 | 3-1-1-1 | 9 | | 12 | 3-2 | 3 | +----+---------+-----------+ MySQL> MIT REKURSIVEM tree_cte als ( Wählen Sie * aus c_tree, wobei parent_id = 3 ist. UNION ALLE wähle t.* aus c_tree t inner join tree_cte tcte auf t.parent_id = tcte.id ) WÄHLEN SIE * AUS tree_cte; +----+---------+-----------+ | ID | CName | übergeordnete_ID | +----+---------+-----------+ | 8 | 3-1 | 3 | | 12 | 3-2 | 3 | | 9 | 3-1-1 | 8 | | 10 | 3-1-2 | 8 | | 11 | 3-1-1-1 | 9 | +----+---------+-----------+
Weitere Informationen https://dev.mysql.com/doc/refman/8.0/en/with.html Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Eine vollständige Aufzeichnung des Prozesses zum Erstellen mobiler Anwendungen mit Vue Native
Es gibt zwei Möglichkeiten, MySQL 5.7 zu installi...
Lösung: Fügen Sie in <head> den folgenden Co...
Vorwort Nach der Bereitstellung des Servers besuc...
Ohne weitere Umschweife werde ich den Code direkt...
Inhaltsverzeichnis Vorwort 1. Installieren Sie sc...
In diesem Artikel finden Sie das Installations-Tu...
1. Übergeordnete Komponenten können Daten über Re...
In diesem Artikelbeispiel wird der spezifische Co...
DOMContentLoaded-Ereignis Es wird buchstäblich au...
1. Einleitung Personen, die nicht an die englisch...
Inhaltsverzeichnis 1. Verwendung von Keep-Alive A...
Das Download- und Installationstutorial für MySQL...
Als der Autor MySQL zum Hinzufügen eines Benutzer...
In diesem Artikelbeispiel wird der spezifische Co...
Bei der Installation von tortoiseGit gab es immer...