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

MySQL REPEAT循环修改计数变量后提前终止,变量返回NULL问题求助

问题根因

  • MySQL内置的CONCAT()函数存在NULL传导特性:只要任意一个输入参数为NULL,最终返回结果就会是NULL。当循环运行到id=1的根节点记录时,pid字段值为NULL,赋值后@i变为NULL,下一轮循环查询id=NULL的记录不存在,子查询返回NULL,直接导致@c被赋值为NULL。
  • 原终止条件存在隐式类型转换问题:@i是无符号整数类型,COALESCE(@i, '')会自动把空字符串转为数字0,导致原判断逻辑永远不会命中,反而会触发id=0的无效查询,最终两个变量都变为NULL,循环异常终止。

修复方案

直接调整终止条件为判断@i IS NULL,同时用COALESCE包裹查询结果避免NULL传导即可,修复后代码如下:

SET @c = '';
SET @i = 4;
REPEAT
    SET @c = CONCAT(
        ' -> ',
        COALESCE((SELECT name FROM c WHERE id = @i), ''),
        @c
    );
    SET @i = (SELECT pid FROM c WHERE id = @i);
UNTIL @i IS NULL
END REPEAT;

-- 去除开头多余的箭头(可选)
SELECT TRIM(LEADING ' -> ' FROM @c) AS parent_path;

运行后返回的路径结果为:1st -> 2nd -> 3rd -> 4th,符合预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 14:36:04