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.
Endlosschleifen vermeiden, wenn sich bei Schleifen nur einige Spaltenwerte wiederholen: cycle
Anleitung: With
— komplexe Abfragen strukturieren
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.
Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how