Mysql.8.0 树形结构的表中,查询所有的父级节点包括自己
查询sql如下:
SELECT
T2.节点名称字段 AS nodeName FROM (
SELECT
@r AS _id,
@STOP := @STOP + IF ( pid(备注:父节点字段,下同。) = null, 1, @STOP ) AS STOP,
( SELECT @r := pid FROM 要查询的表 WHERE id = _id ) AS pid,
@l := @l + 1 AS lvl
FROM ( SELECT @r := 要查询的节点id对应的值, @l := 0, @STOP := 0 ) vars, 要查询的表 h
WHERE
@STOP < 1
) T1
JOIN 要查询的表 T2 ON T1._id = T2.主键id字段
ORDER BY
T1.lvl DESC;
说明:
“@”:表示mysql 中动态定义变量的格式,跟java中参数一样。
@STOP:动态标识结束的条件
IF ( pid(备注:父节点字段) = null, 1, @STOP ) : 这块代码的意思是,当条件pid(备注:父节点字段) = null 结果为true时,得到的结果值为1,也就是逗号后的那个值,当条件结果为false时,为逗号后面的@STOP值。