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

递归查询获取数据:解决从Agat出发的可达城市查询报错

解决递归SQL查询的类型匹配错误及正确写法

错误原因

报错ERROR: operator does not exist: integer = character varying的核心问题是数据类型不匹配:
Trains表的departure和arrival字段是整数类型(关联Cities表的CID),但原查询中用c.city(字符串类型)和t.arrival做关联,整数与字符串无法直接比较,导致类型兼容错误。

修正后的SQL查询

WITH recursive reachable_cities AS (
  -- 初始节点:Agat作为起点,0站停留,同时记录城市ID和名称
  SELECT 0 AS stops, c.CID, c.CITY
  FROM cities c
  WHERE c.CITY = 'Agat'
  
  UNION ALL
  
  -- 递归遍历:每次延伸一站,通过城市ID关联火车线路
  SELECT r.stops + 1 AS stops, c.CID, c.CITY
  FROM reachable_cities r
  INNER JOIN trains t ON r.CID = t.departure
  INNER JOIN cities c ON t.arrival = c.CID
  WHERE r.stops < 3  -- 限制最多经过3个中间站
)
-- 去重输出所有可到达的城市
SELECT DISTINCT CITY FROM reachable_cities;

关键修正点

  • 递归过程中跟踪CID(整数类型),用它和Trains表的departure/arrival关联,彻底解决类型不匹配问题
  • 用UNION ALL替代UNION,避免不必要的重复数据检查,提升查询效率
  • 最终用DISTINCT去重,排除多条线路到达同一城市的重复结果
  • 条件r.stops < 3确保查询范围是最多经过3站(包含起点Agat本身,以及经过1、2、3站后到达的所有城市)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:35:18