Geht das… with recursive (… union [distinct] …)


Vollständig unterstützt von MySQL ab 8.0.11. Vollständig unterstützt von MariaDB ab 10.2. Vollständig unterstützt von SQLite ab 3.8.3. Vollständig unterstützt von PostgreSQL ab 8.4.Apache DerbyBigQueryDb2 (LUW)H2MariaDBMySQLOracle DBPostgreSQLSQL ServerSQLite200520072009201120132015201720192021✓ 3.8.3+⊘ 3.5.7 - 3.7.11⊘ 2008R2 - 2022✓ 8.4+⊘ 8.3⊘ 11gR1 - 21c✓ 8.0.11+⊘ 5.0 - 5.7✓ 10.2+⊘ 5.1 - 10.1⊘ 2.0.204 - 2.1.214⊘ 1.4.191 - 1.4.200⊘ 9.7 - 11.5.7⊘ 2.0⊘ 10.15.1.3 - 10.16.1.1

Mit Union [distinct] kann man auch in rekursiven Abfragen Duplikate entfernen und damit unter bestimmten Voraussetzungen Endlosschleifen verhindern.

WITH RECURSIVE path (a, b) AS (
  SELECT edges.* FROM edges
                WHERE a = 1
UNION
  SELECT edges.* FROM edges
                 JOIN path 
                   ON edges.a = path.b
)
SELECT *
  FROM path

Falls der Graph in der Edges-Tabelle eine Schleife enthält, wiederholen sich alle Spaltenwerte, sodass union (ohne all) nur eine davon ausgibt und daher keine Endlosschleife entsteht.

Normative References

Die With recursive-Klausel ist in ISO/IEC 9075:2016-2 als Teil des optionalen Features T131, „Recursive query“ definiert. Union [distinct] gehört zum vorgeschriebenen Feature E071-01.

Über den Autor

Foto von Markus Winand

Markus Winand ist der SQL Renaissance Botschafter auf der Mission, Entwickler auf die Evolution von SQL im 21. Jahrhundert aufmerksam zu machen. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„modern SQL“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO | CC-BY-NC-ND 3.0 Lizenz