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 pathFalls 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.
Passend dazu
Endlosschleifen vermeiden, wenn sich bei Schleifen nur einige Spaltenwerte wiederholen:
cycleAnleitung:
With— komplexe Abfragen strukturieren
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.

