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

MySQL递归CTE报错排查:多中转航线查询语句第21行错误

递归CTE错误原因分析

第21行的错误主要由以下几个问题导致:

  • REGEXP_INSTR参数顺序完全颠倒
    多数数据库的REGEXP_INSTR函数语法为REGEXP_INSTR(待搜索的源字符串, 要匹配的正则表达式),你当前写法REGEXP_INSTR('%'+r1.airport_to+'%', r.Route)把参数搞反了——原本是要检查已生成的航线r.Route中是否包含即将新增的机场r1.airport_to(避免循环航线),但现在的逻辑变成拿包含机场的字符串去匹配航线,完全不符合需求,这是直接触发错误的核心原因。

  • 错误混用通配符%
    REGEXP_INSTR是正则匹配函数,不需要用%做通配符(这是LIKE语句的用法)。要实现“航线中未出现过目标机场”的逻辑,直接写REGEXP_INSTR(r.Route, r1.airport_to) = 0即可。

  • 字符串拼接的潜在风险
    你在CONCAT函数内部用+拼接字符串,部分数据库(如MySQL)中+是算术运算符,若字段类型非字符串会触发隐式转换错误。建议统一用CONCAT完成拼接,比如把concat(airport_from + '->' + airport_to)改为CONCAT(airport_from, '->', airport_to)。

修正后的关键判断行应为:

and REGEXP_INSTR(r.Route, r1.airport_to) = 0

另外,建议给递归CTE加上递归深度限制(比如SQL Server中添加OPTION (MAXRECURSION 3),因你限制中转次数≤2,递归深度最多3层),避免意外触发无限递归。

内容的提问来源于stack exchange,提问作者Ксения Батракова

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:36:20