表结构 create table CS_INTCTL_ASSESS_ITEM_GATHER ( assess_id VARCHAR2(36), assess_parent_id VARCHAR2(36), name VARCHAR2(256) ) 要实

表结构

create table CS_INTCTL_ASSESS_ITEM_GATHER

(

 assess_id      VARCHAR2(36),

 assess_parent_id  VARCHAR2(36),

 name        VARCHAR2(256)

)

要实现的功能

传入一个 assess_id 找出他所有的下级。assess_parent_id有可能找出的assess_parent_id还有下级还需要找出。然后找出他所有的下级以及这是第几级。

就像这样:

d24e44cbc0c34452b1da93739adfe716 0                  1

d24e44cbc0c34452b1da93739adfe716 0                  1

7540f5592a794ec0982bbea817d4b8ce d24e44cbc0c34452b1da93739adfe716 2 08c080e87e134183b239cc7409be5210 d24e44cbc0c34452b1da93739adfe716 2 7d77b36468e04e96a56af4f105225fac 7540f5592a794ec0982bbea817d4b8ce 3 13af09d9e8ad4da297e72e3020e290c8 08c080e87e134183b239cc7409be5210 3 c46a67ffa5dc4cd990e9402dd5f21e56 7540f5592a794ec0982bbea817d4b8ce 3


那你得需要循环去查了,一次性查询是不好实现的

这个不好实现吧。。。这得相当于在SQL语句实现递归了。。

除非你一开始就在数据表里 加一个字段叫 Children_ids

用来存储所有的下级id

select * from CS_INTCTL_ASSESS_ITEM_GATHER where assess_parent_id='传入的值'

后台用递归的方式去查询,用一个属性去记录级数

具体怎么做


佣金可以商量

加我q:1571488201

很简单啊树状结构...
你可以这样去存数据
A0001.B0002.C0003然后模糊查询就行了

能说的具体点吗


我的表结构和你的表结构可能不一样...

能加个微信或者qq吗

可以加钉钉 18061904250

就是几张表 第一张 主键是A001  A002
           第二张 主键是B001  B002
           第三张 主键是C001  C002
 关系表里存 A001.B001.C001 然后你模糊查就好了呀

找下级 不是特简单 select * from table where column like 'B001.%'

递归循环累不累

有多少层下级现在不清楚关键

所以

有多少层有什么关系?....
找直系下属 不就是  select * from table where column like 'B001.%.'

他的下属也有下属啊

我知道下属也有下属啊。
你想查啥。A的所有子代?

额嗯

--所有子代
select * from table where column like '%A001.%'
--直系子代
select * from table where column like '%A001.%.%'
你建一张关系表 里面存A001.B001的数据你就明白了
实在想做循环就这么做吧https://www.cnblogs.com/GoCircle/p/9442387.html

以地址的三级联动举例吧:

select a.area_id, a1.area_id, a2.area_id

from area a

left join area a1 on a.area_id = a1.parent_id

left join area a2 on a1.area_id = a2.parent_id


如果再增加下级,需要改sql, left join area a3 on a2.area_id = a3.parent_id 以此类推

有条件的话 再加上对应层级的id where a.area_id = 1, a.area_id 这里是一级的,如果是2级的 a1.area_id = ?

如果需要知道第几级,可以对表增加一个字段 level,新增数据的时候存入,返回的时候再查出来就可以了

首先确定下你问题解决了么?然后你用的数据库是mysql还是oracle,oracle我记得有递归函数

这是经典的层次查询,Oracle 有语法支持:

select assess_id, assess_parent_id, level
from cs_intctl_assess_item_gather
start with assess_id = 'd24e44cbc0c34452b1da93739adfe716'
connect by prior assess_id = assess_parent_id;

你可以加一个字段,保存他的所有父级,这样就不用循环查询了,比如1下面有2,2下面有3,那么3里面可以存一个-2-3-,包括你说的层级也可以存一个level字段。

对啊,我也说用这种格式.
写递归是为了面试dba用?