首页 > 解决方案 > 如何递归检索可用城镇?

问题描述

我正在制作一个运输应用程序,现在,我正在实现 SQL 并编写一些查询。

我有一个表 Train(From, To),它基本上是一个有两列的表。第一列是您开始的城市,下一列是您到达的城市。

我的问题是我怎样才能递归地检索你可以从某个城市去的所有城市?例如,这是一个示例数据集:

圣路易斯 杰斐逊城
杰斐逊城 柯克伍德
芝加哥 圣路易斯
柯克伍德 贝尔维尔

因此,如果我将 St. Louis 传递到这个递归函数中,我会得到 Jefferson City、Kirkwood 和 Belleville 作为可达城市。

SQL 语言是 Postgres/Sqlite :)

标签: sqlpostgresqlsqliterecursionrecursive-query

解决方案


使用WITH RECURSIVE

WITH RECURSIVE
    c(t) AS (
        SELECT "to" FROM cities
            WHERE "from" = 'St Louis'
        UNION
        SELECT "to" FROM cities, c
            WHERE c.t = cities."from"
    )
SELECT t FROM c;

(在 sqlite3 中测试)。


推荐阅读