求大神写个从父子节点查出目录的SQL

求大神写个从父子节点查出目录的SQL,第1张

您是要在查询结果中显示出树形结构

这非常难,我曾经作过BOM树形显示,但非常复杂,需要根据层次数计算向右沿伸的制表符长度,节点部位用丁形制表符。最好不要用这种方式吧。

现在前台编程语言都有树形结构控件,按期要标提供父子结构的表参数即可,很简单的。

你的意思是查询出org_id = 890节点的所有子节点和其父节点吧?

试试这个:

你没给出表名,加入表名是A吧

select from A

where Aorg_id =890 --本节点

OR Aparent_id = 890 --子节点

OR Aorg_id in (select parent_id from A where Aorg_id =890) --父节点

希望能帮到你……

呃,因为我不清楚你的表里,这个BPROD

char(15)

老爸

里面记录的值是不是和BMWHS

对应的,所以只能说个大概。

select

sys_connect_by_path(username,'>')

"Path"

from

tmbm

start

with

id=1

connect

by

prior

id=parentid;

其中,id是你要遍历的起始点,比如你想从

厂号=XX

的这个父节点开始寻找他所有的子节点,这里就换成

start

with

BMWHS=XX

然后,connect

by

prior

id=parentid,这里id=parentid,简单解释就是寻找其他记录里,parentid和我的id相同的记录,也就是找子节点。

应该是换成你的BMWHS=BPROD(我不知道你的BPROD

BCHLD

和哪个属性是对应的,是BMWHS吗?)

如果是的话就是下面这样(username是你要返回的值,假设你还是要返回

BSEQ

序号)

select

sys_connect_by_path(BSEQ,'>')

"Path"

from

tmbm

start

with

BMWHS=XX

connect

by

prior

BMWHS=BPROD;

假如你的表名字是tt,创建下面的存储过程,使用存储过程即可查询。

create proc querytree

@user varchar(100)

as

begin

declare @id int

declare @T_tmp table(id int,username varchar(100),parentid int)

insert into @T_tmp select from tt where username=@user

while(@@rowcount>0)

begin

insert into @T_tmp select from tt where parentid in (select id from @T_tmp) and id not in(select id from @T_tmp)

end

select from @T_tmp where username<>@user

end

create table tmp

(

PARTNAME varchar(50),

QTY int,

CHILD_ID varchar(50),

PARENT_ID varchar(50)

)

GO

declare @name varchar(50)

set @name='AA'

insert into tmp

select distinct t2PARTNAME, t1QTYt2QTY,t2CHILD_ID,t2PARENT_ID from tree t1,tree t2 where t1PARENT_ID=t2CHILD_ID and t1PARTNAME=@name

while exists(select from tmp t1,tree t2 where t1PARENT_ID=t2CHILD_ID and t2PARTNAME not in(select PARTNAME from tmp))

begin

insert into tmp

select distinct t2PARTNAME, t1QTYt2QTY,t2CHILD_ID,t2PARENT_ID from tmp t1,tree t2 where t1PARENT_ID=t2CHILD_ID and t2PARTNAME not in(select PARTNAME from tmp)

end;

select PARTNAME,QTY,CHILD_ID from tmp where PARENT_ID=0

drop table tmp

不是很明白你的问题,如果说前台每次点击一个目录展开调用ajax的话,直接将当前节点的id传入到后台,然后返回结果不就可以了么,直接写slq

select from table where parent_id = input_id //input_id就是传入的id

如果一次性查出所有结果的话

一级树结构的:select from table where parent_id is null

二级树结构的:select from table where parent_id in (select id from table where parent_id is null)

三级树结构的:select from table where parent_id in (select id from table where parent_id in (select id from table where parent_id is null))

类似的以此类推呗,但是所有数据都查询出来后到前台还需要进一步分类,比较麻烦吧。

Create Table emp

(

IDint, 

parentID int

)

insert into emp values(1      ,     0)

insert into emp values(5      ,     3)

insert into emp values(3      ,     1)

insert into emp values(4      ,     2)

insert into emp values(2      ,     1)

--按id拼个路径出来,然后按路径排序即可

--这是mssql的写法,db2我不知道

--search BREADTH first by ID set sort,估计是按用来产生排序的

With Report(ParentID,ID,Level)

As

(

Select parentID,ID,Convert(Varbinary(Max),id) 

    From emp Where parentID='0' 

    Union All

    Select empparentID,empID,Level+Convert(Varbinary,empid) 

    From report Join emp

    On empparentID=reportID

)

Select ID,parentID From report

Order By Level

--或者

With Report(ParentID,ID,Level)

As

(

    Select parentID,ID,Convert(Varchar(Max),Right('00000'+id,5)) 

    From emp Where parentID='0' 

    Union All

    Select empparentID,empID,Level+'-'+Convert(Varchar(Max),Right('00000'+empid,5)) 

From report Join emp

On empparentID=reportID

)

Select ID,parentID From report

Order By Level

这个很简单啊

表结构一般如下tablename(表名)

id--节点ID, name-- 节点名称 parentid父节点ID,

-----获取节点号为6下的所有子节点

select from tablename t start with id =6 connect by prior id=parentid

以上就是关于求大神写个从父子节点查出目录的SQL全部的内容,包括:求大神写个从父子节点查出目录的SQL、查询父机构 sql问题、sql 知道父节点,查询所有的子节点,运用游标,递归,存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9491006.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存