sql 父类下的子类查询的方法,包含父类的信息
如:1桌子02椅子03凳子04大号15中号16小号1查找父类下的子类并且包含父类的信息如要查找桌子的信息格式如下1桌子04大号15中号16小号1请问sql语句如何实现?...
如:
1 桌子 0
2 椅子 0
3 凳子 0
4 大号 1
5 中号 1
6 小号 1
查找父类下的子类并且包含父类的信息 如要查找桌子的信息格式如下
1 桌子 0
4 大号 1
5 中号 1
6 小号 1
请问sql语句如何实现? 展开
1 桌子 0
2 椅子 0
3 凳子 0
4 大号 1
5 中号 1
6 小号 1
查找父类下的子类并且包含父类的信息 如要查找桌子的信息格式如下
1 桌子 0
4 大号 1
5 中号 1
6 小号 1
请问sql语句如何实现? 展开
3个回答
2015-08-12 · 知道合伙人数码行家
关注
展开全部
-查询各节点的父路径函数(从父到子)
create function f_pid1(@id varchar(3)) returns varchar(100)
as
begin
declare @re_str as varchar(100)
set @re_str = ''
select @re_str = name from tb where id = @id
while exists (select 1 from tb where id = @id and pid is not null)
begin
select @id = b.id , @re_str = b.name + ',' + @re_str from tb a , tb b where a.id = @id and a.pid = b.id
end
return @re_str
end
go
--查询各节点的父路径函数(从子到父)
create function f_pid2(@id varchar(3)) returns varchar(100)
as
begin
declare @re_str as varchar(100)
set @re_str = ''
select @re_str = name from tb where id = @id
while exists (select 1 from tb where id = @id and pid is not null)
begin
select @id = b.id , @re_str = @re_str + ',' + b.name from tb a , tb b where a.id = @id and a.pid = b.id
end
return @re_str
end
go
select * ,
dbo.f_pid1(id) [路径(从父到子)] ,
dbo.f_pid2(id) [路径(从子到父)]
from tb order by id
drop function f_pid1 , f_pid2
drop table tb
/*
id pid name 路径(从父到子) 路径(从子到父)
create function f_pid1(@id varchar(3)) returns varchar(100)
as
begin
declare @re_str as varchar(100)
set @re_str = ''
select @re_str = name from tb where id = @id
while exists (select 1 from tb where id = @id and pid is not null)
begin
select @id = b.id , @re_str = b.name + ',' + @re_str from tb a , tb b where a.id = @id and a.pid = b.id
end
return @re_str
end
go
--查询各节点的父路径函数(从子到父)
create function f_pid2(@id varchar(3)) returns varchar(100)
as
begin
declare @re_str as varchar(100)
set @re_str = ''
select @re_str = name from tb where id = @id
while exists (select 1 from tb where id = @id and pid is not null)
begin
select @id = b.id , @re_str = @re_str + ',' + b.name from tb a , tb b where a.id = @id and a.pid = b.id
end
return @re_str
end
go
select * ,
dbo.f_pid1(id) [路径(从父到子)] ,
dbo.f_pid2(id) [路径(从子到父)]
from tb order by id
drop function f_pid1 , f_pid2
drop table tb
/*
id pid name 路径(从父到子) 路径(从子到父)
展开全部
declare @t table(编号 varchar(20),名称 varchar(10),数量 int)
insert into @t select '01' ,'桌子' ,0
union select '0101','大号',1
union select '0102','中号',1
union select '0103','小号',1
union select '02','椅子',0
union select '03','凳子',0
select * from @t
--仅查询桌子及其子类的情况
select 编号,名称 , 数量
from @t
where 编号 like '01%'
insert into @t select '01' ,'桌子' ,0
union select '0101','大号',1
union select '0102','中号',1
union select '0103','小号',1
union select '02','椅子',0
union select '03','凳子',0
select * from @t
--仅查询桌子及其子类的情况
select 编号,名称 , 数量
from @t
where 编号 like '01%'
追问
如果数据很多的话,这样写岂不是很麻烦。有没简单的sql语句
追答
数据有多少?500万条也能瞬间完成。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果在sql sever 2005或以上版本可以这样
with a as(
select id,nodename,pid from 表 where id='05009'
union all
select x.id,a.nodename,a.pid from 表 x,a
where x.pid=a.id)
select * from a
with a as(
select id,nodename,pid from 表 where id='05009'
union all
select x.id,a.nodename,a.pid from 表 x,a
where x.pid=a.id)
select * from a
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询