首页 > 解决方案 > 使用 SQL 计算完整图中的边

问题描述

假设我们有一个表T表示(无向)图的边。有两列XY,其中 X 列中的条目起始节点,Y中的条目是结束节点。

例如下图:

在此处输入图像描述

可以用下表表示:

|-----|----|
|  X  |  Y |
|-----|----|
|  a  |  e |
|  b  |  c |
|  d  |  c |
|-----|----|

是否可以使用 SQL 查询生成包含T隐含的所有不相交完整图的所有边的表?也就是说,如果在它们之间存在某种路径(任意长度!),则通过将任意两个节点与一条边连接起来,从T生成的图。

对于上面的示例,完成的图表如下所示:

在此处输入图像描述

表格可能是:

|-----|----|
|  X  |  Y |
|-----|----|
|  a  |  e |
|  b  |  c |
|  d  |  c |
|  b  |  d |
|-----|----|

一般来说,我的印象是,如果不使用某种递归公用表表达式,SQL 查询就无法做到这一点。使用循环,可以通过将T连接到自身以生成由长度为 2 的路径连接的节点列表,然后再次将其连接为长度为 3 的路径等来解决问题,在n步后停止,其中n是数字的节点。

但是,我认为这样的循环在“标准”SQL 中是不可能的。是否有一种惯用的 SQL 方法来执行此操作?

标签: sqlalgorithmgraph-theorygraph-algorithmimpala

解决方案


推荐阅读