
您是要在查询结果中显示出树形结构。
这非常难,我曾经作过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 知道父节点,查询所有的子节点,运用游标,递归,存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)