表结构
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用?