MySQL会话第一次执行此SQL时抛出“子查询返回多行结果”的异常,如何解决?

问题遇到的现象和发生背景

通过MySQL查询指定机构的所有父机构信息
新会话第一次执行时必定抛出多结果异常,此后再次执行就可以正常返回结果了,这个简直莫名奇妙啊
哪有同一个SQL两次执行返回不一样的结果的,这个错误让我懵了好久

很无奈,虽然有解决办法,但是不知道原因还是有点不甘心,希望您能告诉我为什么,如果太过复杂,还请您指点一下方向,不胜感激!

问题相关代码,请勿粘贴截图

CREATE TABLE `org` (
    `id` BIGINT ( 20 ) NOT NULL COMMENT '机构id',
    `pid` BIGINT ( 20 ) NOT NULL DEFAULT '0' COMMENT '父机构id',
    `org_name` VARCHAR ( 255 ) NOT NULL COMMENT '机构名称',
PRIMARY KEY ( `id` ) USING BTREE 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COMMENT = '机构表';

SELECT
    @sup_id AS 'id',
    ( SELECT org_name FROM org WHERE id = @sup_id ) AS 'org_name',
    ( SELECT @sup_id := pid FROM org WHERE id = @sup_id ) AS 'pid'
FROM
    org,
    ( SELECT @sup_id := 233) temp
运行结果及报错内容

img

我的解答思路和尝试过的方法

发生错误的子查询是 ( SELECT org_name FROM as_org WHERE id = @sup_id ) AS 'org_name',

img

我想要达到的结果

关于这个问题我可以通过表连接解决第一次查询时的子查询异常,但是我更想知道此异常发生的原因,以及解决的方法(硬刚的那种,不想回避问题)

select查询列中使用子函数时,子函数只能返回一个结果值。加一个limit限制吧,返回一条。

SELECT
    @sup_id AS 'id',
    ( SELECT org_name FROM org WHERE id = @sup_id limit 1) AS 'org_name',
    ( SELECT @sup_id := pid FROM org WHERE id = @sup_id limit 1) AS 'pid'
FROM
    org,
    ( SELECT @sup_id := 233) temp
select pid from as_org WHERE id = 1468177630664540161

先查一下在这个表里面是否存在一个id对应多个pid的情况。

按照你这个表结构,我模拟了4条数据,然后用你这个sql怎么查都不会出现你这个报错,因此怀疑是你表里面的数据有问题,
虽然你给的建表sql写了个PRIMARY KEY,但这个表名好像和你截图里的表名不一致,因此不能排除数据存在异常的可能。

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632