sql - 使用 SQL 计算完整图中的边
问题描述
假设我们有一个表T表示(无向)图的边。有两列X和Y,其中 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 方法来执行此操作?