获取数据库中树结构的数据

SQL:START WITH CONNECT BY PRIOR
背景:数据库中有一张部门表,表中有department_id和parent_id两个字段,department_id字段存的是部门id,parent_id存的是父部门Id。需要根据某个部门id查出它的所有字部门树或者父部门树。使用START WITH CONNECT BY PRIOR 语句。

oracle的start with connect by prior是根据条件递归查询"树",分为四种使用情况:

常用的是第一第二种,start with 子节点ID='...' ,后面的prior在哪一侧,查的就是哪一侧的树

第一种:start with 子节点ID='...' connect by prior 子节点ID = 父节点ID

select *
  from ZWKJ_DEPARTMENT t
 start with t.department_guid = 'xxx'
connect by prior t.department_guid = t.superior_guid 

按照条件department_guid='xxx',对'xxx'(包括自己)及其子节点进行递归查询,查询结果自己所有的后代节点(包括自己)。

第二种:start with 子节点ID='...' connect by 子节点ID = prior 父节点ID


select *
  from ZWKJ_DEPARTMENT t
 start with t.department_guid = 'xxx'
connect by t.department_guid = prior t.superior_guid 

image.png

按照条件department_guid='xxx',对'xxx'(包括自己)及其父节点进行递归查询,查询结果自己所有的前代节点(包括自己)。

第三种:start with 父节点ID='...' connect by prior 子节点ID = 父节点ID

select *
  from ZWKJ_DEPARTMENT t
 start with t.superior_guid = 'xxx'
connect by prior t.department_guid = t.superior_guid 

按照条件superior_guid='xxx',对'xxx'(不包括自己)子节点进行递归查询,查询结果自己所有的后代节点(不包括自己)。

第四种:start with 父节点ID='...' connect by 子节点ID = prior 父节点ID

select *
  from ZWKJ_DEPARTMENT t
 start with t.superior_guid = 'xxx'
connect by t.department_guid = prior t.superior_guid 

按照条件superior_guid='xxx',对'xxx'(包括自己)的第一代孩子们及其父节点进行递归查询,查询结果自己的第一代后节点和所有的前代节点(包括自己)。

如果有where 条件,如下

select *
  from ZWKJ_DEPARTMENT t where 条件
 start with t.superior_guid = 'xxx'
connect by t.department_guid = prior t.superior_guid 

执行顺序为先执行start with connect by prior,然后再按照where条件进行过滤。

你可能感兴趣的:(获取数据库中树结构的数据)