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
1. parseFloat()-Funktion Erstellen Sie auf einer ...
Vorwort Vor kurzem hat unsere Firma MBP konfiguri...
Wenn Sie Entwickler sind und in die Welt von .NET...
Manchmal ist das Herunterladen großer Netzwerkdat...
a href="#"> Nach dem Klicken auf den ...
Hier sind einige Beispiele, wie ich diese Eigensch...
Die Installations- und Konfigurationsmethoden von...
1. Vorbereitung 1.1 Laden Sie das Python-Installa...
Netzwerktyp nach der Docker-Installation [root@in...
<br />Es gibt zwar viele Tools zum Erstellen...
Inhaltsverzeichnis 1. Angelegenheiten: Vier Haupt...
<Vorlage> <div Klasse="App-Containe...
In diesem Artikel wird die spezifische Methode zu...
Dieser Artikel stellt ein Beispiel vor, wie man m...
Code kopieren Der Code lautet wie folgt: <Ausw...