MySQL传递关闭远程通货紧缩

时间:2015-11-17 21:13:21

标签: mysql sql stored-procedures relational-database transitive-closure-table

有一个表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命令实现这一目标?我知道它可以递归地完成,但是教授告诉我们要做到这两点。

2 个答案:

答案 0 :(得分:0)

将city2从一端加到city1到另一端的city1。这里的假设是没有记录,其中city1和city2的组合在那里翻转了两次城市。如果是,请包含一个过滤器,以过滤掉一侧的city1与另一侧的city2相等的位置。

答案 1 :(得分:0)

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