0

有一张表格distances(city1, city2, dist)列出了几个城市和它们之间的距离。交易是,从这些信息中我们可以得到更多的距离,比如在表distancesdist A -> B 和 dist B -> C 中,所以我们可以得到不在distances.

任务是生成distances_tr(city1, city2, dist)具有第一个表的传递闭包的表,其中包括(A, C, dist(A,C)).

如何使用PROCEDURE简单的 SQLSELECT, INSERT, UPDATE命令来实现这一点?我知道它可以递归完成,但教授告诉我们要双向进行。

4

2 回答 2

0

将表连接到 city2 的一侧,连接到另一侧的 city1。这里的假设是没有记录,其中 city1 和 city2 的组合出现两次,并且城市翻转了。如果是,请包含一个过滤器以过滤掉一侧的 city1 等于另一侧的 city2 的位置。

于 2015-11-17T21:51:26.827 回答
0

创建一个过程,首先将距离复制到 distances_tr,然后重复插入距离与 distances_tr 的连接,直到不再更新任何行。确保在 city1 和 city2 的组合上正确定义主键,并且在插入具有重复键的行时,可以使用现有值中的最小值和与连接的距离之和来更新 distances_tr。

于 2015-11-20T07:31:54.163 回答