在很多数据库表的设计当中,在设计到树状结构数据时,并没有采用新建关联表,而是将所有的数据都放在的一张表中,即子id与父id共存于一条数据当中。
本文就oracle举例而言:
在这里,我们可以用递归查询的sql来处理:
select a.*,level from 表名 a start with 条件1 connnect by prior 条件2 where 条件3
例:
(1)、通过父id查询所有的子id
select id from sc_org start with pid ='0' connect by prior id = pid;
(2)、通过子id查询所有的父id
select pid from sc_org start with id ='1049692015' connect by prior pid = id;
1、start with :后面的条件表示递归的起始点。(从pid或id为多少时开始查)
2、connect by 条件2:表示递归时前后两条数据的关联关系
3、prior的位置决定了递归时的具体关系或者说是决定了查询时的检索顺序
prior id = pid 可以理解为当前节点的id等于下一个节点的pid
prior pid = id 可以理解为当前节点的pid等于下一个节点的id
4、level关键字表示层次: 可通过level 关键字表示查询结果所在层次,根节点的层号为1
Myname_China 发布了11 篇原创文章 · 获赞 3 · 访问量 1万+ 私信 关注