You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Postgres/SQLite中递归查询指定城市可到达的所有城镇

实现方案

PostgreSQL和SQLite都支持WITH RECURSIVE递归公共表表达式语法,可以直接用来实现多跳可达城市查询,不需要额外自定义函数。

注意事项

From和To属于SQL保留关键字,查询时必须用双引号包裹转义,否则会触发语法错误。

完整查询代码

WITH RECURSIVE reachable_cities AS (
    -- 初始步:获取出发城市的直达目的地
    SELECT "To" AS city
    FROM Train
    WHERE "From" = 'St Louis' -- 此处替换为实际传入的出发城市参数
    
    UNION
    
    -- 递归步:将已查到的可达城市作为新出发地,查询下一级目的地
    SELECT t."To" AS city
    FROM Train t
    INNER JOIN reachable_cities rc ON t."From" = rc.city
    WHERE t."To" NOT IN (SELECT city FROM reachable_cities) -- 避免环线导致的无限递归和重复数据
)
-- 输出所有可达城市
SELECT city FROM reachable_cities;

效果说明

用你提供的示例数据集,传入St Louis作为出发城市执行上述查询,返回结果正好是Jefferson City、Kirkwood、Belleville,和预期完全一致。如果存在环线(比如A到B、B到A的路线),查询也会自动去重不会陷入死循环。


内容的提问来源于stack exchange,提问作者zakpruitt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:09:00