关于查找周期已有几个问题,但我没有在SQL中找到解决方案(MSSQL首选)。
表格是Node(NodeID INT)和Edge(EdgeID INT,NodeID1 INT,NodeID2 INT)
在有向图中找到循环的效果如何?
答案 0 :(得分:1)
答案 1 :(得分:1)
您无法在纯SQL中执行此操作。在您的查询中,JOIN的数量总是有限的。你有多大的JOIN数量,你总是可以构造一个包含更多边缘的循环,证明查询不健全。
所以你应该使用某种循环,在某些SQL方言中实现,或者在perl或ruby中实现。
答案 2 :(得分:1)
解决方案非常简单明了,但有点长:
首先生成通过图表的所有路径的列表,这样任何路径都不会多次包含相同的边缘。
根据这些信息,我们获取在同一节点中开始和结束的路径列表。
从这个“最终”边缘列表中,我们根据前两个步骤的计算重建所有具有周期的路径。
我在我的博客上发布了complete solution in TSQL。