with recursive (… union [distinct] …)


BigQueryDb2 (LUW)DerbyH2MariaDBMySQLOracle DBPostgreSQLSQL ServerSQLite20092011201320152017201920212023✓ 3.8.3 - 3.50.0⊘ 3.5.7 - 3.7.11⊘ 2008R2 - 2022✓ 8.4 - 18⊘ 8.3⊘ 11gR1 - 23.9✓ 8.0.11 - 9.4.0⊘ 5.0 - 5.7✓ 10.2 - 12.0.2⊘ 5.1 - 10.1⊘ 1.4.191 - 2.3.232⊘ 10.15.1.3 - 10.17.1.0⊘ 9.7 - 12.1.2⊘ 2.0

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-2:2023 §7.17 als Teil des optionalen Features T131, „Recursive query“ definiert. Union [distinct] gehört zum vorgeschriebenen Feature E071-01.

20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS, um sukzessive aufzuholen und modern-sql.com am Radar zu behalten.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. 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»

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2015-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO