← CODE WALKTHROUGHS
CODE WALKTHROUGHS
Exploring Graph Relationships with SQL Server
Often in SQL there are graph-like structures that, with some unique queries, can answer a new set of questions. This article details one approach to traversing these tables with a method similar to a traditional graph algorithm.
Relational tables are secretly graphs. A foreign key is an edge. Once you see it, you can't unsee it, and you can borrow traversal techniques the graph people have used for decades.
§The recursive CTE
The workhorse here is the recursive common table expression. It gives you a breadth-first walk over your edges without ever leaving SQL Server.
WITH walk AS (
SELECT id, parent_id, 0 AS depth
FROM nodes WHERE id = @root
UNION ALL
SELECT n.id, n.parent_id, w.depth + 1
FROM nodes n JOIN walk w ON n.parent_id = w.id
)
SELECT * FROM walk OPTION (MAXRECURSION 0);
Mind the cycles. Without a visited-set guard this will happily loop forever on a graph that isn't a tree.
// READ THE NEXT ONE