Informationen zu WITH-Abfragen in MySQL 8 Vorwort: Bei logisch komplexem SQL kann die Anzahl der temporären Tabellen erheblich reduziert und die Lesbarkeit und Wartbarkeit des Codes verbessert werden. 1. Beispiel Aus dem ersten offiziellen Beispiel können wir ersehen, dass die Abfrageanweisung vier temporäre Tabellen erstellt: MIT cte1(txt) AS (SELECT "Dieses "), cte2(txt) AS (SELECT CONCAT(cte1.txt,"ist ein ") FROM cte1), cte3(txt) AS (SELECT "nette Abfrage" UNION SELECT "Abfrage, die rockt" UNION SELECT "Abfrage"), cte4(txt) ALS (SELECT concat(cte2.txt, cte3.txt) VON cte2, cte3) WÄHLEN SIE MAX(txt), MIN(txt) AUS cte4; +----------------------------+----------------------+ | MAX(txt) | MIN(txt) | +----------------------------+----------------------+ | Das ist eine tolle Abfrage. | Das ist eine nette Abfrage. | +----------------------------+----------------------+ 1 Zeile im Set (0,00 Sek.) Das zweite offizielle Beispiel ist die Verwendung von Rekursion. Basierend auf der Lektüre der Dokumentation habe ich die folgenden Abfrageergebnisse analysiert. MIT REKURSIVEM my_cte AS ( WÄHLEN SIE 1 AS n UNION ALLE WÄHLEN SIE 1+n AUS my_cte, WO n<10 ) WÄHLEN SIE * AUS my_cte; +------+ | n | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +------+ 10 Zeilen im Set (0,00 Sek.) Meinem Verständnis nach habe ich die folgenden zwei unterschiedlichen Abfragen geschrieben und die Abfrageergebnisse sind dieselben. Dies gibt den Spaltennamen der temporären Tabelle in der ersten Zeile an WITH RECURSIVE my_cte(a,b,c) AS ( WÄHLEN SIE 1,1,1 UNION ALLE WÄHLEN SIE 1+a,2+b,3+c AUS my_cte, WO a<10 ) WÄHLEN SIE * AUS my_cte; In der ersten Zeile werden keine Spaltennamen angegeben. Die Spaltennamen werden durch die Ergebnisse der ersten Abfrage WITH RECURSIVE my_cte AS bestimmt. ( WÄHLEN Sie 1 als a, 1 als b, 1 als c UNION ALLE WÄHLEN SIE 1+a,2+b,3+c AUS my_cte, WO a<10 ) WÄHLEN SIE * AUS my_cte; Laut der offiziellen Dokumentation sieht die Syntaxvorlage für eine temporäre Tabelle wie folgt aus, die aus Abfragen mit vielen Zeilen bestehen kann. WITH RECURSIVE cte_name [Liste der Spaltennamen] AS ( SELECT ... <-- gibt den Anfangssatz an UNION ALLE SELECT ... <-- gibt den Anfangssatz an UNION ALLE ... SELECT ... <-- gibt an, wie neue Zeilen abgeleitet werden UNION ALLE SELECT ... <-- gibt an, wie neue Zeilen abgeleitet werden ... ) [, eine beliebige Anzahl anderer CTE-Definitionen] Das offizielle Dokument führt auch auf, dass Sie bei Verwendung temporärer Tabellen neue Tabellen hinzufügen, löschen, ändern und abfragen können. Weitere Einzelheiten finden Sie im offiziellen Dokument. 3. Üben Rekursive Übungen werden hauptsächlich für Tabellen verwendet, die übergeordnete Knoten-IDs usw. enthalten. Einzelheiten finden Sie in den folgenden Übungen. Tabelle erstellen tb (ID VARCHAR (3), PID VARCHAR (3), Name VARCHAR (64)); INSERT INTO tb VALUES('002', 0, 'Provinz Zhejiang'); INSERT INTO tb VALUES('001', 0, 'Provinz Guangdong'); INSERT INTO tb VALUES('003', '002', 'Stadt Quzhou'); INSERT INTO tb VALUES('004', '002', 'Hangzhou'); INSERT INTO tb VALUES('005', '002', 'Stadt Huzhou'); INSERT INTO tb VALUES('006', '002', 'Stadt Jiaxing'); INSERT INTO tb VALUES('007', '002', 'Ningbo-Stadt'); INSERT INTO tb VALUES('008', '002', 'Stadt Shaoxing'); INSERT INTO tb VALUES('009', '002', 'Stadt Taizhou'); INSERT INTO tb VALUES('010', '002', 'Stadt Wenzhou'); INSERT INTO tb VALUES('011', '002', 'Stadt Lishui'); INSERT INTO tb VALUES('012', '002', 'Stadt Jinhua'); INSERT INTO tb VALUES('013', '002', 'Stadt Zhoushan'); INSERT INTO tb VALUES('014', '004', 'Uptown'); INSERT INTO tb VALUES('015', '004', 'Innenstadt'); INSERT INTO tb VALUES('016', '004', 'Bezirk Gongshu'); INSERT INTO tb VALUES('017', '004', 'Bezirk Yuhang'); INSERT INTO tb VALUES('018', '011', 'Bezirk Jindong'); INSERT INTO tb VALUES('019', '001', 'Guangzhou'); INSERT INTO tb VALUES('020', '001', 'Stadt Shenzhen'); MIT REKURSIVEM cte AS ( Wählen Sie ID, Name aus tb, wobei ID = '002' ist. UNION ALLE Wählen Sie k.id, CONCAT (c.name, '->', k.name) als Name von tb k INNER JOIN cte c auf c.id = k.pid ) AUSWÄHLEN * VON cte; Ausführungsergebnis: Das Analyseergebnis umfasst die Daten der ersten Zeile Dies ist das Ende dieses Artikels über MySQL WITH-Abfragedetails. Weitere relevante MySQL WITH-Abfrageinhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: HTML-Formularanwendung beinhaltet die Verwendung von Kontrollkästchen und Optionsfeldern
>>: Eine kurze Erklärung zum sinnvollen Einsatz von Tabellen und Divs im Seitendesign
for-Schleife Die For-Schleife durchläuft die Elem...
1: schreibgeschützt dient zum Sperren dieses Steue...
<!DOCTYPE html> <html lang="de"...
Inhaltsverzeichnis 1. Übergeordnete Komponenten u...
Die Version Mysql5.7.19 ist eine neue Version, di...
Funktion: Zur vorherigen Seite oder zur nächsten ...
Zuerst erstellen wir die Datenbanktabelle: Tabell...
Vorwort Der Blogger verwendet die Idea IDE. Da di...
Inhaltsverzeichnis Überblick 0. Grundlagen von Ja...
Inhaltsverzeichnis Frontend Entwerfen und schreib...
1. Wodurch wird die Geschwindigkeit der Datenbank...
Inhaltsverzeichnis BOM (Browserobjektmodell) 1. F...
Das Installationstutorial für MySQL 5.7.27 wird w...
Inhaltsverzeichnis Verwenden von Slots in Vue: Sl...
Dieser Artikel verwendet die Lizenzvereinbarung „...