MySQL 距离关系的传递闭包

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

有一个表distances(city1, city2, dist)列出了几个城市以及它们之间的距离。协议(protocol)是,从这些信息中我们可以获得更多距离,就像表 distances 中的 dist A -> B 和 dist B -> C 一样,这样我们就可以获得不在表中的 A -> C 距离

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

如何使用 PROCEDURE 和简单的 SQL SELECT、INSERT、UPDATE 命令来实现这一目标?我知道可以递归地完成,但教授告诉我们两种方法都可以。

最佳答案

将 city2 上的表从一侧连接到另一侧的 city1。这里的假设是,不存在 city1 和 city2 的组合出现两次并且城市翻转的记录。如果是,请添加一个过滤器来过滤掉一侧的 city1 与另一侧的 city2 相等的位置。

关于MySQL 距离关系的传递闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33767105/

相关文章:

scala - 使用 Slick 调用存储过程

mysql - phpMyAdmin 上的 SQL INSERT INTO 错误 #1064

php - 如何将这个 php 数组文件解析到 Access 中?

php - 排序后从列表中获取可排序的 Jquery-ui 数据

sql-server - 存储过程返回前修改SQL结果集

mysql - 为什么我们可以使用 = 和 := both with set?

mysql - 如何对表列中定义的表进行 LEFT JOIN

mysql - 如果一个值在一个表中但不在另一个表中,如何加入并给出默认值?

java - 仅当值大于当前值时才更新字段的 SQL 语句

sql - 比较SQLite中的两个表