mysql sql语句问题

SELECT c.id, (select @b:=c.id) as 'iid',
(select a._id from
(SELECT @c '_id',
(select @c:=parent_id from sys_menu where id = _id) 'parent'
from sys_menu sys,(select @c:=@b) r) a where _id is not null and parent is null) 'parent'
from (SELECT * from sys_menu s where id in(8,11)) c

请问这个sql语句错在哪里,id为8 的结果是对的,id为11的结果不对,变量传递的有问题吗

太多关联。看的好晕。这么多关联从最后开始看。结果一条一条对比

排查这个问题,把复杂的查询逻辑拆开,跟洋葱一样,从外往里剥,然后从最里面的一个sql先去执行,再把最里面的一个sql和下一个sql合并下再执行,以此类推,逐一核对8和11的数据是哪个sql导致的,一般就是那个sql对应的条件中8符合条件,而11不满足条件所以数据出现了差异。

可以看下这个博客


递归查询

是不是有null值 影响数据的查询

看你这个语句,你好像是想查询出ID为8和11的父ID吧,干嘛要这么写?不懂你要的是什么效果

一般就是那个sql对应的条件中8符合条件,而11不满足条件所以数据出现了差异。
递归查询结果一条一条对比

这个时角标还是区间,开闭区间不同吧

变量确实太多了,一般设置一个就够了