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
max_allowed_packet ist ein Parameter in MySQL, de...
Die Rolle des virtuellen DOM Zunächst müssen wir ...
In diesem Artikelbeispiel wird der spezifische Co...
Als Nächstes werde ich zwei Tabellen erstellen un...
Inhaltsverzeichnis Funktionsformat sofort ausführ...
MySql verwendet verknüpfte Tabellenabfragen, die ...
Die Vorbereitung auf die Abschlussprüfungen im le...
GitHub bietet alle möglichen magischen Tools. Heu...
Inhaltsverzeichnis 1. Experimentelle Umgebung 2. ...
Die eigene Quelle von Ubuntu stammt aus China, da...
Binlog ist eine binäre Protokolldatei, die alle M...
Vorwort Kürzlich stieß ich bei der Arbeit auf ein...
Inhaltsverzeichnis I. Definition 2. Anwendungssze...
<br />Einige Webseiten sehen nicht groß aus,...
Inhaltsverzeichnis Hörer 1.Uhreneffekt 2.Uhr 1.1 ...