sql - MS Access 数据库中的最短路径

标签 sql ms-access

我必须为一家德国公司制作一个数据库,我遇到了一个复杂的问题,我无法完全用 SQL 解决,所以我不能直接在 Access 中打印它。

我需要在 MS Access 中以最短的方式报告...

例如,我有一个包含火车站的列表和一个直接连接到这些车站的列表:

>Table 1                      Table 2
>+--+---------------+-----+   +------+------+
>|ID|Station        |aCity|   |StaID1|StaID2|
>+--+---------------+-----+   +------+------+
>|01|Dounat Plains  |true |   |    01|    03|
>+--+---------------+-----+   +------+------+
>|02|Vanila Lake    |false|   |    03|    02|
>+--+---------------+-----+   +------+------+
>|03|Spiral Mountain|false|   |    05|    01|
>+--+---------------+-----+   +------+------+
>|04|Gruntys Lair   |false|   |    04|    05|
>+--+---------------+-----+   +------+------+
>|05|New Donk City  |true |   |      |      |
>+--+---------------+-----+   +------+------+

现在我必须创造一些东西,女巫打印每一个“非城市”,它如何与一个城市以及它需要到达那里的每个车站相连。

我想到了这样的事情:
>+---------------+-----------------------------------------------------+  
>|Station        |Steps                                                | 
>+---------------+-----------------------------------------------------+ 
>|Vanila Lake    |Conection over "Spiral Mountain" with "Dounat Plains"|
>+---------------+-----------------------------------------------------+ 
>|Spiral Mountain|Conection with "Dounat Plains"                       |
>+---------------+-----------------------------------------------------+ 
>|Gruntys Lair   |Conection with "New Donk City"                       | 
>+---------------+-----------------------------------------------------+ 

如果它更简单:每个城市都与其他城市相连,每个“非城市”都只与一个城市相连,但中间有台阶。

我想到了链表之类的东西,但我只找到了如何使用数字,例如从 1 到 10 并以 2、3、4、5 等为步骤,以及如何处理它们,但从来没有,如何创建一个,具有表 2 中的特定连接。

现在我被卡住了,这不好,因为我必须在 7 周内完成,而且在我完成这个问题后我还有更多的事情要做。

- 更新 ——

我尝试了一些不同的 SQL 方法来解决这个问题,我敢打赌,它们会起作用,但 Access 太有限了,所以我的问题似乎无法在 MS Access 中管理。

但是我仍然需要在 Access 中提供包含这些信息的报告。有没有办法编写脚本并在 Access 报告中实现它?

最佳答案

这是一个远没有那么容易解决的问题......

您本质上要寻找的是一种算法,可以找到从每个非城市到城市的(最短)路径。
这是一个图形问题,因此最好使用图形数据库(例如 neo4j )来解决。

尽管这远非有效,但使用 SQL 实现并不容易,我不确定 Access-SQL 是否能够解决这个问题。

我建议阅读 Dijkstra's algorithm以及类似这个问题的类似方法,例如:SQL for shortest path problems

如果您可以在 MS-Access 应用程序中使用 VBA,您可以尝试在 VBA 中而不是 SQL 中实现这样的算法。

关于sql - MS Access 数据库中的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57406717/

相关文章:

SQL 连接两个表中任一表中的空值

database - ms access 中插入查询的持续时间

c# - access数据库中如何查看用户名和密码

c# - 没有为一个或多个必需参数/SQL 提供的值应该是正确的

mysql - SQL案例少行分析

php - mysql 不接受撇号 '

sql - 有没有更快的方法来计算连接上的记录

mysql - 在 MySQL 中创建 "Numbers Table"

php - 通过php将Access数据库导出到MySql

python - 使用 Python 将文本文件导入 Access 2003 数据库