Oracle 中START WITH...CONNECT BY PRIOR...对应的mysql

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);

就解决问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值