SQL语句之START WITH CONNECT BY PRIOR 使用方法
START WITH CONNECT BY PRIOR用于组织结构查询、省市查询、多级菜单查询(商城系统),通过父级id查询所有的子级、以及通过当前id查询父级。
基本数据表
以组织结构表为准(),例如:
ID | PARENTDEPARTID | ORG_TYPE | 其它字段 |
---|---|---|---|
1012 | 1012A1100001X9TI' |
1 | … |
1023 | 1013A1100001X9TI |
2 | … |
1025 | 1015A1100001X9TI |
1 | … |
从父级查询子级(自顶向下)
以ID=‘1012’为根节点,向下查询所属的节点
SELECT *
FROM T_S_DEPART T2
START WITH T2.ID = '1012'
CONNECT BY PRIOR T2.ID = T2.PARENTDEPARTID;
从子级查询父级(自底向上)
以ID = '1012A1100001X9TI’为根据点,向上查找父节点
描述:
SELECT *
FROM T_S_DEPART T2
START WITH T2.ID = '1012A11000000001X9TI'
CONNECT BY PRIOR T2.PARENTDEPARTID = T2.ID ORDER BY ID;
添加WHERE条件
--从父级查询子级
SELECT *
FROM T_S_DEPART T2 WHERE ORG_TYPE = '2'
START WITH T2.ID = '1012'
CONNECT BY PRIOR T2.ID = T2.PARENTDEPARTID;
--从子级查询父级
SELECT *
FROM T_S_DEPART T2 WHERE ORG_TYPE = '1'
START WITH T2.ID = '1012A11000000001X9TI'
CONNECT BY PRIOR T2.PARENTDEPARTID = T2.ID ORDER BY ID;
添加AND条件
--从父级查询子级
SELECT *
FROM T_S_DEPART T2
START WITH T2.ID = '1012'
CONNECT BY PRIOR T2.ID = T2.PARENTDEPARTID AND ORG_TYPE = '2';
--从子级查询父级
SELECT *
FROM T_S_DEPART T2
START WITH T2.ID = '1012A11000000001X9TI'
CONNECT BY PRIOR T2.PARENTDEPARTID = T2.ID ORDER BY ID AND ORG_TYPE = '1';
完。
如果你看到了这里,觉得文章写得不错就给个赞,关注公众号,可订阅更多干货?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢!