oracle递归树查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | tb_org表结构: | orgid | parentorgid | orgname | | 1 | NULL | 总公司 | | 2 | 1 | 四川公司| | 3 | 2 | 成都公司| | 4 | 1 | 北京公司| --start with 数据开始条件 connect by prior 树形结构条件 --伪列函数SYS_CONNECT_BY_PATH,CONNECT_BY_ROOT,CONNECT_BY_LEAF,CONNECT_BY_ISCYCLE --查询层级 SELECT level,orgid,orgname,parentorgid FROM tb_org START WITH orgid=1 --从orgid=1的数据开始找起走,或用parentid is null CONNECT BY prior orgid=parentorgid; --树结构条件 | level | orgid | orgname | parentorgid | | 1 | 1 | 总公司 | NULL | | 2 | 2 | 四川公司 | 1 | | 3 | 3 | 成都公司 | 2 | | 2 | 4 | 北京公司 | 1 | SELECT level,orgid,orgname,parentorgid FROM tb_org START WITH orgid=1 CONNECT BY prior orgid=parentorgid ORDER BY level; | level | orgid | orgname | parentorgid | | 1 | 1 | 总公司 | NULL | | 2 | 2 | 四川公司 | 1 | | 2 | 4 | 北京公司 | 1 | | 3 | 3 | 成都公司 | 2 | --缩进 SELECT level, lpad(' ',3*level-1)||'|--'||orgname AS orgname FROM tb_org START WITH orgid=1 CONNECT BY prior orgid=parentorgid; | level | orgname | | 1 | |--总公司 | | 2 | |--四川公司 | | 3 | |--成都公司 | | 2 | |--北京公司 | SELECT level, lpad(' ',3*level-1)||'|--'||orgname AS orgname FROM tb_org START WITH orgid=1 CONNECT BY prior orgid=parentorgid ORDER BY level; | level | orgname | | 1 | |--总公司 | | 2 | |--四川公司 | | 2 | |--北京公司 | | 3 | |--成都公司 | --完整路径 SELECT level,orgid,lpad(' ',3*level-1)||'|--'||orgname AS orgname,parentorgid,sys_connect_by_path(orgid,'/') path FROM tb_org START WITH orgid=1 CONNECT BY prior orgid=parentorgid; | level | orgid | orgname | parentorgid | path | | 1 | 1 | |--总公司 | null | /1 | | 2 | 2 | |--四川公司 | 1 | /1/2 | | 3 | 3 | |--成都公司 | 2 | /1/2/3 | | 2 | 4 | |--北京公司 | 1 | /1/4 | --查找根节点 SELECT level,orgid,lpad(' ',3*level-1)||'|--'||orgname AS orgname,connect_by_root orgid AS root,parentorgid,sys_connect_by_path(orgid,'/') path FROM tb_org START WITH orgid=1 CONNECT BY prior orgid=parentorgid; | level | orgid | orgname | parentorgid |root | path | | 1 | 1 | |--总公司 | null |1 | /1 | | 2 | 2 | |--四川公司 | 1 |1 | /1/2 | | 3 | 3 | |--成都公司 | 2 |1 | /1/2/3 | | 2 | 4 | |--北京公司 | 1 |1 | /1/4 | --是否叶子节点 SELECT level,orgid,lpad(' ',3*level-1)||'|--'||orgname AS orgname,connect_by_isleaf AS leaf,parentorgid,sys_connect_by_path(orgid,'/') path FROM tb_org START WITH orgid=1 CONNECT BY prior orgid=parentorgid; | level | orgid | orgname | parentorgid |leaf | path | | 1 | 1 | |--总公司 | null |0 | /1 | | 2 | 2 | |--四川公司 | 1 |0 | /1/2 | | 3 | 3 | |--成都公司 | 2 |1 | /1/2/3 | | 2 | 4 | |--北京公司 | 1 |1 | /1/4 | |
Comments are currently closed.