一张菜单表,父菜单和子菜单都在这个表,有一个pid,查询所有菜单的时候怎么能一起把每个子菜单的父菜单都查出来

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

img

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img

第一种用sql实现:

select
a.字段一,
a.字段二,
b.字段三
from 表名 a
left join 表名 b
on a.p_id = b.tm_id

第二种查询出来之后在java中通过递归,按照主键id和p_id进行匹配获取对应的父菜单名称

这种业务最好在java中处理,不要去写复杂的sql,不好维护。

咋一看以为需要递归,但仔细一看,你只需要展现当前层级和父层级两个,不需要找祖父层级,那么使用简单的自关联即可

select a.tm_id,a.tm_name,b.tm_id,b.tm_name 
from t a left join t b on a.pid=b.tm_id

当然,如果你需要找到当前层级往上的所有层级,mysql8.0中可以使用with递归sql,写法也不复杂

内关联查询,sql如下,xxx为你的表名,如果对你有所帮助,望采纳
SELECT m.*,m1.menu_name parentMenuName from xxx m LEFT JOIN xxx m1 on m.p_id = m1.tm_id