最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle樹形查詢CONNECT BY雙向遍歷實(shí)戰(zhàn)指南

 更新時(shí)間:2026年05月19日 09:22:04   作者:【JAVA】玩家  
本文介紹了Oracle數(shù)據(jù)庫(kù)的CONNECTBY語(yǔ)法在處理樹形數(shù)據(jù)(如菜單、組織架構(gòu)等方面的應(yīng)用,詳述了父向子、子向向兩種遍歷方式的實(shí)現(xiàn),并法及其條件設(shè)置,并提供了適用于MySQL/PostgreSQL的替代方案,總結(jié)了使用過程中的注意事項(xiàng),并給出了Java調(diào)用示例,感興趣的朋友一起看看吧

?? 適用數(shù)據(jù)庫(kù)說(shuō)明:

  • Oracle:原生支持 CONNECT BY 語(yǔ)法,是處理樹形數(shù)據(jù)的標(biāo)準(zhǔn)方案。
  • 達(dá)夢(mèng)數(shù)據(jù)庫(kù)(DM):完全兼容 Oracle 的 CONNECT BY 語(yǔ)法,可直接使用本文所有示例。
  • MySQL / PostgreSQL:不支持 CONNECT BY,請(qǐng)使用 WITH RECURSIVE(公共表表達(dá)式)實(shí)現(xiàn)類似功能。

一、場(chǎng)景說(shuō)明

處理菜單 / 組織架構(gòu)等樹形數(shù)據(jù)時(shí),Oracle CONNECT BY 可實(shí)現(xiàn)向上、向下兩種遞歸遍歷,無(wú)需復(fù)雜存儲(chǔ)過程。

二、核心 SQL 實(shí)戰(zhàn)

1. 父→子向下遍歷(查所有子節(jié)點(diǎn))

select distinct
    m.menu_id,
    m.parent_id,
    m1.menu_name as parent_name,
    m.menu_name,
    m.menu_abbreviation,
    m.display_location,
    m.path,
    m.icon,
    m.order_num,
    m.menu_type,
    m.is_frame
from auth_sys_menu m
left join auth_sys_menu m1 on m.parent_id = m1.menu_id
start with m.menu_id in ('13')---這里填父級(jí)菜單
connect by prior m.menu_id = m.parent_id
order by m.parent_id, m.order_num;

效果返回指定父節(jié)點(diǎn)下所有子菜單(含多級(jí)后代),用于菜單批量授權(quán)、樹形展開。

2. 子→父向上遍歷(查所有父節(jié)點(diǎn))

select distinct
    m.menu_id,
    m.parent_id,
    m1.menu_name as parent_name,
    m.menu_name,
    m.menu_abbreviation,
    m.display_location,
    m.path,
    m.icon,
    m.order_num,
    m.menu_type,
    m.is_frame
from auth_sys_menu m
left join auth_sys_menu m1 on m.parent_id = m1.menu_id
start with m.menu_id in ('1024')----這里填寫子菜單
connect by prior m.parent_id = m.menu_id
order by m.parent_id, m.order_num;

效果返回指定子節(jié)點(diǎn)的所有上級(jí)節(jié)點(diǎn)(含根節(jié)點(diǎn)),用于面包屑導(dǎo)航、權(quán)限繼承校驗(yàn)。## 三、關(guān)鍵語(yǔ)法對(duì)比

遍歷方向CONNECT BY 條件核心作用
父→子PRIOR m.menu_id = m.parent_id查所有后代節(jié)點(diǎn)
子→父PRIOR m.parent_id = m.menu_id查所有祖先節(jié)點(diǎn)

四、避坑要點(diǎn)

  • DISTINCT:層級(jí)查詢易出現(xiàn)重復(fù)數(shù)據(jù),需去重。
  • START WITH:支持 IN 傳入多個(gè)起始節(jié)點(diǎn),實(shí)現(xiàn)多分支遍歷。
  • ORDER BY:配合 order_num 保證菜單展示順序。

五、Java 調(diào)用示例(MyBatis)

<select id="listChildMenus" resultType="com.xxx.vo.MenuVO">
    select distinct
        m.menu_id,
        m.parent_id,
        m1.menu_name as parent_name,
        m.menu_name,
        m.path,
        m.icon
    from auth_sys_menu m
    left join auth_sys_menu m1 on m.parent_id = m1.menu_id
    start with m.menu_id in (#{menuId})
    connect by prior m.menu_id = m.parent_id
    order by m.parent_id, m.order_num
</select>

六、總結(jié)

CONNECT BY 是 Oracle 處理樹形數(shù)據(jù)的高效方案,掌握兩種遍歷方式可覆蓋大部分業(yè)務(wù)場(chǎng)景。通過調(diào)整 PRIOR 的位置,即可輕松實(shí)現(xiàn)向上、向下兩種遍歷,覆蓋絕大多數(shù)菜單、組織架構(gòu)等業(yè)務(wù)場(chǎng)景。

到此這篇關(guān)于Oracle樹形查詢CONNECT BY雙向遍歷實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Oracle CONNECT BY雙向遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

灵寿县| 平陆县| 裕民县| 逊克县| 新丰县| 方山县| 嘉黎县| 丽水市| 江口县| 湖州市| 广东省| 互助| 双峰县| 江达县| 应用必备| 晋宁县| 永宁县| 隆德县| 肇庆市| 湛江市| 罗源县| 炎陵县| 华容县| 哈尔滨市| 东阳市| 葫芦岛市| 出国| 施秉县| 泾川县| 沽源县| 兴隆县| 凤庆县| 额济纳旗| 霍林郭勒市| 鹤壁市| 庐江县| 邯郸市| 富阳市| 郁南县| 酒泉市| 顺昌县|