精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在MySQL中,如何輕松找到所有子節點?

數據庫 MySQL
項目中遇到一個需求,要求查出菜單節點的所有節點,在網上查了一下,大多數的方法用到了存儲過程,由于線上環境不能隨便添加存儲過程。

背景

項目中遇到一個需求,要求查出菜單節點的所有節點,在網上查了一下,大多數的方法用到了存儲過程,由于線上環境不能隨便添加存儲過程。

因此在這里采用類似遞歸的方法對組織下的所有子節點進行查詢。

準備

創建組織表:

CREATE TABLE groups (
  `group_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '組織ID',
  `parent_id` int(11) DEFAULT NULL COMMENT '父節點ID',
  `group_name` varchar(128) DEFAULT NULL COMMENT '組織名稱',
  PRIMARY KEY (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

寫入數據:

INSERT INTO groups VALUES (0, null, '系統管理組織');
INSERT INTO groups VALUES (1, 0, '中國電信股份有限公司');
INSERT INTO groups VALUES (2, 1, '萬州分公司');
INSERT INTO groups VALUES (3, 1, '涪陵分公司');
INSERT INTO groups VALUES (4, 2, '龍都支局');
INSERT INTO groups VALUES (5, 2, '新田支局');
INSERT INTO groups VALUES (6, 3, '馬武支局');
INSERT INTO groups VALUES (7, 3, '南沱支局');
INSERT INTO groups VALUES (8, 4, '黨群工作部');
INSERT INTO groups VALUES (9, 5, '客戶服務部');
INSERT INTO groups VALUES (10, 6, '采購和供應鏈管理事業部');
INSERT INTO groups VALUES (11, 7, '網絡和信息安全管理部');

樹狀結構:

- 系統管理組織
  - 中國電信股份有限公司
    - 萬州分公司
      - 龍都支局
        - 黨群工作部
      - 新田支局
        - 客戶服務部
    - 涪陵分公司
      - 馬武支局
        - 采購和供應鏈管理事業部
      - 南沱支局
        - 網絡和信息安全管理部

實現

查詢

select
 group_id,group_name
from
 (
 select
  t1.group_id,
  t1.parent_id,
  t1.group_name,
  t2.pids,
  if(find_in_set(parent_id, @pids) > 0,@pids := concat(@pids, ',', group_id),0) as ischild
 from
  (select group_id,parent_id,group_name from `groups` ) t1,
  (select @pids := #{groupId} as pids) t2) t3
 where
  ischild != 0;

比如,要查詢的萬州分公司下所有子節點,只需將#{groupId}變更為萬州分公司的組織ID即可:

group_id|group_name|
--------+----------+
       4|龍都支局      |
       5|新田支局      |
       8|黨群工作部     |
       9|客戶服務部     |

語句解析

  • t1:該子查詢從groups表中選擇group_id,parent_id,group_name
group_id|parent_id|group_name |
--------+---------+-----------+
       0|         |系統管理組織     |
       1|        0|中國電信股份有限公司 |
       2|        1|萬州分公司      |
       3|        1|涪陵分公司      |
       4|        2|龍都支局       |
       5|        2|新田支局       |
       6|        3|馬武支局       |
       7|        3|南沱支局       |
       8|        4|黨群工作部      |
       9|        5|客戶服務部      |
      10|        6|采購和供應鏈管理事業部|
      11|        7|網絡和信息安全管理部 |
  • t2:該子查詢初始化一個用戶定義變量@pids,并為其賦予一個名為groupId
pids|
----+
   2|
  • if(find_in_set(parent_id, @pids) > 0,@pids := concat(@pids, ',', group_id),0):這一部分使用find_in_set函數檢查parent_id是否存在于@pids變量中。如果存在,則將當前group_id添加到@pids變量并返回;否則返回0
group_id|parent_id|group_name |pids|ischild  |
--------+---------+-----------+----+---------+
       0|         |系統管理組織     |   2|0        |
       1|        0|中國電信股份有限公司 |   2|0        |
       2|        1|萬州分公司      |   2|0        |
       3|        1|涪陵分公司      |   2|0        |
       4|        2|龍都支局       |   2|2,4      |
       5|        2|新田支局       |   2|2,4,5    |
       6|        3|馬武支局       |   2|0        |
       7|        3|南沱支局       |   2|0        |
       8|        4|黨群工作部      |   2|2,4,5,8  |
       9|        5|客戶服務部      |   2|2,4,5,8,9|
      10|        6|采購和供應鏈管理事業部|   2|0        |
      11|        7|網絡和信息安全管理部 |   2|0        |
  • 使用where子句過濾結果,只包括那些ischild不等于0的行
group_id|group_name|
--------+----------+
       4|龍都支局      |
       5|新田支局      |
       8|黨群工作部     |
       9|客戶服務部     |

MySQL 8.0版本

引入了通用表表達式(CTE),可以使用CTE來進行遞歸查詢

WITH RECURSIVE subordinates AS (
    SELECT group_id, group_name, parent_id
    FROM groups
    WHERE parent_id = 2  -- 指定父節點ID
    
    UNION ALL
    
    SELECT g.group_id, g.group_name, g.parent_id
    FROM groups g
    INNER JOIN subordinates s ON s.group_id = g.parent_id
)
SELECT * FROM subordinates;
  • 使用了WITH RECURSIVE子句,它創建了一個名為subordinates的遞歸公共表達式(CTE)
  • 從groups表中選擇group_id,group_name和parent_id字段,其中parent_id = 2,也就是選擇parent_id=2直接子組
  • 將groups表(別名為'g')與subordinates(別名為's')進行內連接。連接條件是'g'的parent_id等于's'的group_id。這意味著我們正在查找先前找到的每個子組的子組
  • 從subordinates中選擇所有行
group_id|group_name|parent_id|
--------+----------+---------+
       4|龍都支局      |        2|
       5|新田支局      |        2|
       8|黨群工作部     |        4|
       9|客戶服務部     |        5|

代碼遞歸

@Test
    public void test1() {
        List<Map<String, Object>> groupList = new ArrayList<>();
        groupList = queryListParentId(2,groupList);
        System.out.println(groupList);

        groupList.clear();
        System.out.println("=====================");

        List<String>list = new ArrayList<>();
        list.add("3");
        groupList = queryListParentId2(list,groupList);
        System.out.println(groupList);
    }
    
    //方式一,循環遍歷查詢
    public List<Map<String, Object>> queryListParentId(Integer parentId,List<Map<String, Object>> groupList) {
        String sql = "select group_id,group_name from groups where parent_id = "+ parentId;
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        if(!CollectionUtils.isEmpty(list)){
            groupList.addAll(list);
            for (Map<String, Object> map : list){
                queryListParentId((Integer) map.get("group_id"),groupList);
            }
        }
        return groupList;
    }
    
    //方式二,使用find_in_set函數
    public List<Map<String, Object>> queryListParentId2(List<String> parentId,List<Map<String, Object>> groupList) {
    String join = String.join(",", parentId);
    String sql = "select group_id,group_name from groups where find_in_set(parent_id,'"+ join+"')";
    List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
    if(!CollectionUtils.isEmpty(list)){
        groupList.addAll(list);
        List<String> collect = list.stream().map(map -> map.get("group_id")+"").collect(Collectors.toList());
        queryListParentId2(collect,groupList);
    }
    return groupList;
}
[{group_id=4, group_name=龍都支局}, {group_id=5, group_name=新田支局}, {group_id=8, group_name=黨群工作部}, {group_id=9, group_name=客戶服務部}]
=====================
[{group_id=6, group_name=馬武支局}, {group_id=7, group_name=南沱支局}, {group_id=10, group_name=采購和供應鏈管理事業部}, {group_id=11, group_name=網絡和信息安全管理部}]

責任編輯:武曉燕 來源: 一安未來
相關推薦

2022-03-22 07:51:45

JS父節點

2011-08-18 13:31:44

SQL Server數子節點查詢所有父節點

2021-02-26 14:20:35

LinuxWindowsexe文件

2015-11-19 15:22:04

App推廣

2023-07-18 07:19:59

2018-05-24 13:58:03

LinuxGoogle Web字Font Finder

2021-12-24 09:58:37

DockerMySQLLinux

2018-07-03 14:00:44

Linux終端script命令

2024-10-24 10:16:36

2025-02-19 10:18:29

2009-03-05 10:10:52

餅圖數據庫JSP

2023-11-02 10:32:27

GoGORM

2011-09-16 17:12:01

iOS應用Android應用Ribblet

2009-11-06 14:51:14

WCF配置子節點

2023-08-30 14:57:30

FirefoxChrome瀏覽器

2011-07-19 11:12:36

PHPMySQL數據庫

2020-09-14 12:51:48

微信文件路徑

2018-05-11 08:20:10

UbuntuLinux MintAndroid Stu

2017-04-01 13:43:05

ApacheHive生存

2009-02-09 10:05:00

內網管理內網安全
點贊
收藏

51CTO技術棧公眾號

国产极品美女高潮无套嗷嗷叫酒店| 亚洲 高清 成人 动漫| 国产三级精品在线观看| 亚洲午夜在线| 亚洲精品视频中文字幕| 在线观看亚洲色图| 污片视频在线免费观看| youjizz国产精品| 国产精品女主播| 日本美女黄色一级片| 99精品国产高清一区二区麻豆| 精品高清美女精品国产区| 日日夜夜精品网站| 亚洲精品视频网| 视频一区中文字幕国产| 欧美成人激情图片网| 极品人妻一区二区三区| **日韩最新| 欧美性猛交xxxxx水多| 黄色www在线观看| 色视频在线观看免费| 韩国理伦片一区二区三区在线播放 | 国产免费一区二区视频| porn视频在线观看| av网站免费线看精品| 国产日韩中文在线| 秋霞精品一区二区三区| 午夜欧美精品| 日韩中文字幕久久| 熟女俱乐部一区二区视频在线| 日韩电影网站| 欧美日韩国产精品一区二区三区四区| 公共露出暴露狂另类av| 成人性生交大片免费看午夜| eeuss影院一区二区三区| 91探花福利精品国产自产在线| aaa在线视频| 日韩视频一区二区三区在线播放免费观看| 久久亚洲影音av资源网| 久久精品三级视频| 精品在线观看入口| 日韩黄在线观看| 日韩av无码一区二区三区不卡| 麻豆久久久久| 欧美午夜免费电影| 日韩av播放器| 成年美女黄网站色大片不卡| 天天影视色香欲综合网老头| 黄色三级中文字幕| 亚洲综合伊人久久大杳蕉| 国产精品欧美极品| 亚洲欧洲一区二区福利| 91视频在线观看| 国产蜜臀av在线一区二区三区| 欧美日韩亚洲综合一区二区三区激情在线 | 成人无遮挡免费网站视频在线观看| 久久久久久免费网| 久久亚洲一区二区| 色视频免费在线观看| 成人va在线观看| 国产精品18毛片一区二区| www.色婷婷.com| 丰满岳乱妇一区二区三区| 亚洲一区二区三区视频播放| 国产成人三级在线播放 | av中文字幕在线| 亚洲国产精品精华液ab| 亚洲春色在线视频| 毛片av在线| 亚洲另类在线制服丝袜| 欧洲精品在线播放| www.九色在线| 日韩欧美亚洲国产一区| 国产免费999| 青草综合视频| 日韩欧美亚洲另类制服综合在线| 91精品又粗又猛又爽| 久久精品国产亚洲5555| 亚洲精品日韩久久久| 黄免费在线观看| 欧美aaaaaaaaaaaa| 欧美日韩成人免费| av大全在线观看| 久久国内精品视频| 91成人免费在线观看| 天天干,夜夜操| 欧美激情一区三区| 男同互操gay射视频在线看| 欧美videosex性欧美黑吊| 婷婷成人激情在线网| 国产v亚洲v天堂无码久久久| 懂色aⅴ精品一区二区三区| 欧美一区二区视频在线观看2020| 精品无码人妻少妇久久久久久| 国产videos久久| 久久网福利资源网站| 国产无套在线观看| 美女在线观看视频一区二区| 91精品国产91久久久久青草| 香港一级纯黄大片| 国产精品午夜在线观看| 国产xxxx振车| 国产91在线播放精品| 精品美女一区二区| 国产激情av在线| 雨宫琴音一区二区在线| 国产精品久久久久久久久久| 亚洲黄色a级片| 国产欧美日韩麻豆91| 黄色污污在线观看| 日本少妇一区| 亚洲大胆人体在线| 美女视频久久久| 亚洲综合99| 成人羞羞视频免费| 中文字幕在线播放| 欧美日韩美女在线| 久久久久久无码精品人妻一区二区| 亚洲另类av| 欧美老女人xx| 中文字幕永久在线视频| 久久久久久久一区| av高清在线免费观看| 国产精品一区二区美女视频免费看| 日韩精品福利在线| 青青草原在线免费观看视频| 毛片不卡一区二区| 你懂的网址一区二区三区| 欧美女同一区| 91精品国产综合久久久蜜臀粉嫩 | 欧美大肥婆大肥bbbbb| 精品一区二区无码| 91网址在线看| 黄页网站大全在线观看| 视频一区日韩精品| 久久国产加勒比精品无码| 中文字幕久久网| 国产亚洲va综合人人澡精品| www.中文字幕在线| 91久久精品无嫩草影院| 欧美丰满少妇xxxx| 国产suv一区二区| 亚洲欧美福利一区二区| 在线观看国产福利| 日韩一区二区在线| 国产精品美女久久久久av超清| 日夜干在线视频| 午夜激情综合网| 美国黄色一级视频| 国产精品v亚洲精品v日韩精品| 91色中文字幕| 国产精品一区二区三区视频网站| 欧美日韩成人激情| 久久一级免费视频| 国内精品免费**视频| 一区二区免费在线观看| 台湾天天综合人成在线| 久久夜色精品国产欧美乱| 一级黄色片免费看| 亚洲人成网站精品片在线观看| 国产欧美精品一二三| 一区二区日韩欧美| 99在线热播| 国产在线88av| 亚洲欧洲在线免费| 最近中文字幕免费在线观看| 中文字幕亚洲区| 精产国品一二三区| 精品动漫一区| 欧美精品v日韩精品v国产精品| 精品免费av在线| 久久久97精品| 色婷婷av一区二区三| 色综合久久88色综合天天6| av男人的天堂av| 久久成人免费日本黄色| 97av中文字幕| 偷拍视屏一区| 国产精品视频久久久久| 毛片在线看片| 亚洲国产精品成人va在线观看| 你懂的国产在线| 国产精品久久久久久久久免费相片 | 亚洲天堂网在线观看| 亚洲视频久久久| 一区二区三区四区蜜桃| 欧洲一级黄色片| 蜜桃视频在线一区| 国产欧美日韩小视频| 精品国产欧美日韩| 成人在线视频网| 波多野结衣乳巨码无在线观看| 亚洲美女中文字幕| 国产精品久久久久毛片| 五月天视频一区| 午夜国产福利视频| 成人涩涩免费视频| 少妇黄色一级片| 伊人久久大香线蕉综合热线| 水蜜桃一区二区三区| 亚洲精品一区二区三区中文字幕| 欧美亚洲国产另类| 福利视频在线| 国产午夜精品视频| 高h调教冰块play男男双性文| 日本久久精品电影| 久久激情免费视频| 国产精品免费免费| 中文字幕在线播放视频| 激情小说亚洲一区| 成人在线观看a| 欧美日韩18| 亚洲mv在线看| 免费观看久久av| 春色成人在线视频| 欧美啪啪网站| 国产成人综合一区二区三区| 牛牛电影国产一区二区| 中文字幕亚洲无线码在线一区| 深夜福利视频网站| 欧美一级xxx| 一卡二卡三卡在线| 色婷婷亚洲精品| 日韩黄色在线视频| 一区二区三区鲁丝不卡| av在线免费播放网址| 国产夜色精品一区二区av| 日本道中文字幕| 国产成人精品亚洲午夜麻豆| 天天干天天操天天玩| 视频一区在线播放| av动漫在线看| 在线综合视频| 欧美啪啪免费视频| 狠狠入ady亚洲精品| 樱空桃在线播放| 99精品综合| 一本色道久久99精品综合| 精品不卡一区| 日本高清久久一区二区三区| 久久综合影院| 日本高清不卡三区| 精品久久久久久久久久久aⅴ| 美女一区视频| 亚洲色图丝袜| 欧美午夜精品久久久久久蜜| 夜夜躁狠狠躁日日躁2021日韩| 精品国产乱码久久久久软件| 澳门成人av| 超碰国产精品久久国产精品99| 国产一区二区三区免费观看在线| 成人黄色片在线| 亚洲网站免费| 91久久极品少妇xxxxⅹ软件| 免费精品一区| 成人羞羞视频免费| 任你躁在线精品免费| 精品日本一区二区三区在线观看 | 亚洲欧洲日本国产| 999成人精品视频线3| 日韩人妻精品一区二区三区| 亚洲久久久久| 日本黄大片在线观看| 99热免费精品| 国产第一页视频| 免费成人在线视频观看| 欧美激情国内自拍| 成人激情校园春色| 最新中文字幕视频| 国产欧美日韩综合精品一区二区| 91香蕉视频网| 亚洲自拍偷拍麻豆| 麻豆久久久久久久久久| 欧美亚洲一区二区三区四区| 国产一区二区三区在线观看 | 五月天激情婷婷| 亚洲久久久久久久久久| 日韩大片在线永久免费观看网站| 久久天天躁夜夜躁狠狠躁2022| gogo久久| 国产精品高清在线观看| 久久精品免视看国产成人| 国产精品二区二区三区| 国产成人ay| 福利在线小视频| 免费在线观看成人av| 天堂视频免费看| 不卡电影免费在线播放一区| a天堂中文字幕| 一区二区三区自拍| 天天干天天色综合| 欧美一区二区在线看| 日色在线视频| 美女福利精品视频| 日本一极黄色片| 91www在线| 国产精品美女www| 视频二区欧美| 日韩影院一区| 亚洲电影成人| 视频免费1区二区三区| 不卡的看片网站| 四虎永久免费地址| 欧美日韩在线影院| 国产91视频在线| 亚洲新中文字幕| 91白丝在线| 亚洲伊人久久大香线蕉av| 久久99免费视频| 97碰在线视频| 久久精品国产精品亚洲综合| 大黑人交xxx极品hd| 亚洲精品乱码久久久久久久久| 一级一片免费看| 亚洲第一精品夜夜躁人人爽| 理论片午午伦夜理片在线播放| 欧美在线亚洲在线| www.国产精品一区| 中文字幕免费高| 免费精品视频在线| 国产交换配乱淫视频免费| 亚洲一区二区精品久久av| 国产精品高潮呻吟av| 国产亚洲人成网站在线观看 | 欧日韩在线观看| www.神马久久| 强开小嫩苞一区二区三区网站| 日韩精品乱码av一区二区| 加勒比精品视频| 一区二区三区久久久| 国产女主播福利| 日韩在线免费av| 成人mm视频在线观看| 免费h精品视频在线播放| 亚洲国产免费| 成人免费看片载| 亚洲影院久久精品| www.日本在线观看| 欧美人交a欧美精品| 北岛玲精品视频在线观看| 一本一本久久a久久精品综合妖精| 久久黄色影院| 性猛交ⅹxxx富婆video| 日韩欧美中文在线| 日本天堂在线| 日韩免费高清在线观看| 最新国产一区| 中文字幕乱码人妻综合二区三区| 91麻豆产精品久久久久久| 偷偷操不一样的久久| 日韩av中文字幕在线免费观看| av人人综合网| 精品日韩美女| 巨乳诱惑日韩免费av| 色噜噜日韩精品欧美一区二区| 色爱区综合激月婷婷| 国产在线高清| 国产精品一区二区久久精品| 99久久99久久精品国产片桃花| 亚洲精品国产一区二区三区| 亚洲欧美一区二区三区久本道91 | 先锋在线资源一区二区三区| 日本不卡的三区四区五区| 四虎影视一区二区| 日韩一级在线观看| 丁香花在线电影小说观看| 久久久水蜜桃| 日本成人在线电影网| 亚洲欧美精品久久| 日韩欧美你懂的| 91超碰国产在线| 日本亚洲欧洲精品| 久久99精品久久只有精品| 91精品一区二区三区蜜桃| 日韩欧美国产系列| 少妇在线看www| 五月天色一区| 国产高清不卡一区| 69视频免费在线观看| 日韩在线欧美在线国产在线| 中文字幕日韩高清在线| 人妻熟妇乱又伦精品视频| 欧美国产亚洲另类动漫| 国产乱淫av免费| 98精品在线视频| 久久久影院免费| 欧美成人精品一区二区综合免费| 欧美色视频日本版| 免费网站免费进入在线| 国产精品久久久久久久天堂第1集| 免费在线日韩av| 九九热最新地址| 亚洲男人天堂2019| www一区二区三区| 欧美国产激情视频| 亚洲日本在线视频观看| 三级在线视频| 成人av蜜桃| 青青草国产精品亚洲专区无| 天堂资源在线播放|