1、Oracle中 START WITH...CONNECT BY PRIOR的作用
在Oracle中START WITH...CONNECT BY PRIOR表示递归:
start with:表示递归其实的条件,父子级条件都可以放
connect by: 连接条件
prior: 优先级关键字 ,这个关键字右边的条件很重要。右边的子级和父级是不一样的结果
2、mysql怎么使用
在MySQL虽然中没有START WITH...CONNECT BY PRIOR来直接使用递归,但是也有许多办法,这里阐述我使用的一种。
先看看我的出问题的sql:
Oracle:
select menu_id
from bassweb.portal_sys_menu
where url is not null CONNECT BY PRIOR menu_id=parent_id
START WITH menu_id ='CATALOG_ANALYSIS_REPORT'
这里使用mysql 8以上版本的 with recursive
然后加上子查询的逻辑来实现;具体代码
(with recursive temp (menu_id, menu_name) as (select menu_id, menu_name
from bassweb.portal_sys_menu
where url is not null
and menu_id = 'CATALOG_ANALYSIS_REPORT'
union all
select b.menu_id, b.menu_name
from bassweb.portal_sys_menu b
inner join temp on temp.menu_id = b.parent_id)
select menu_id, menu_name
from temp);
就解决问题了