有一个表distances(city1, city2, dist)
列出了几个城市和它们之间的距离。根据这些信息,我们可以获得更多距离,例如表distances
dist A - > B和dist B - > C所以我们可以得到A - > C不在distances
。
任务是生成表distances_tr(city1, city2, dist)
,其中包含第一个表的传递闭包,其中包括(A, C, dist(A,C))
。
如何使用PROCEDURE
和简单的SQL SELECT, INSERT, UPDATE
命令实现这一目标?我知道它可以递归地完成,但是教授告诉我们要做到这两点。
答案 0 :(得分:0)
将city2从一端加到city1到另一端的city1。这里的假设是没有记录,其中city1和city2的组合在那里翻转了两次城市。如果是,请包含一个过滤器,以过滤掉一侧的city1与另一侧的city2相等的位置。
答案 1 :(得分:0)
创建一个首先将距离复制到distance_tr的过程,然后使用distance_tr重复插入距离连接,直到不再更新行为止。确保在city1和city2的组合上正确定义主键,并且在插入具有重复键的行时,可以使用现有值和距连接的距离之和来更新distance_tr。