有层级的,怎么用sql查询返回结果
字段1是字段2的父级,图中左边是原来的样子,要求返回父级字段1值为‘A’下的所有子级,查询后返回图右边的结果。...
字段1是字段2的父级,图中左边是原来的样子,要求返回父级字段1值为‘A’下的所有子级,查询后返回图右边的结果。
展开
5个回答
展开全部
层次化查询,即树型结构查询,是SQL中经常用到的功能之一,通常由根节点,父节点,子节点,叶节点组成,其语法如下:
SELECT [LEVEL] ,column,expression,...
FROM table_name
[WHERE where_clause]
[[START WITH start_condition] [CONNECT BY PRIOR prior_condition]];
LEVEL:伪列,用于表示树的层次
start_condition:层次化查询的起始条件,指定阶层的根。
prior_condition:定义父节点和子节点之间的关系,PRIOR指定父节点。作为运算符,PRIOR和加(+)减(-)运算的优先级相同。condition ... PRIOR expr = expr 或者 ... expr = PRIOR expr
例:
CONNECT BY last_name != 'King' AND PRIOR employee_id = manager_id ...
CONNECT BY PRIOR employee_id = manager_id and PRIOR account_mgr_id = customer_idSYS_CONNECT_BY_PATH
SYS_CONNECT_BY_PATH这个函数是oracle9i才新提出来的!
它一定要和connect by子句合用!
第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符!
SELECT [LEVEL] ,column,expression,...
FROM table_name
[WHERE where_clause]
[[START WITH start_condition] [CONNECT BY PRIOR prior_condition]];
LEVEL:伪列,用于表示树的层次
start_condition:层次化查询的起始条件,指定阶层的根。
prior_condition:定义父节点和子节点之间的关系,PRIOR指定父节点。作为运算符,PRIOR和加(+)减(-)运算的优先级相同。condition ... PRIOR expr = expr 或者 ... expr = PRIOR expr
例:
CONNECT BY last_name != 'King' AND PRIOR employee_id = manager_id ...
CONNECT BY PRIOR employee_id = manager_id and PRIOR account_mgr_id = customer_idSYS_CONNECT_BY_PATH
SYS_CONNECT_BY_PATH这个函数是oracle9i才新提出来的!
它一定要和connect by子句合用!
第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-03-20
展开全部
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(字段1 char(3),字段2 char(3),Level int)
AS
BEGIN
declare @Level int
set @level=1
insert @t_level select 字段1,字段2,@level from tb where 字段1=@id
while @@rowcount>0
begin
set @level=@level+1
insert @t_Level select tb.字段1,tb.字段2,@level
from tb join @t_level t on tb.字段1=t.字段2
where t.level+1=@level
end
return
end
go
select * from dbo.f_Cid('A')
RETURNS @t_Level TABLE(字段1 char(3),字段2 char(3),Level int)
AS
BEGIN
declare @Level int
set @level=1
insert @t_level select 字段1,字段2,@level from tb where 字段1=@id
while @@rowcount>0
begin
set @level=@level+1
insert @t_Level select tb.字段1,tb.字段2,@level
from tb join @t_level t on tb.字段1=t.字段2
where t.level+1=@level
end
return
end
go
select * from dbo.f_Cid('A')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Create FUNCTION [dbo].[oriTree](@f2 AS varchar(10))
RETURNS TABLE
AS
RETURN(
WITH Subtree(f1,f2)
AS
(
SELECT f1,f2
FROM t
WHERE f1= @f2
UNION ALL
SELECT f1,f2
FROM t AS e
join Subtree AS es
ON e.f1= es.f2
)
SELECT * FROM Subtree
)
GO
Select * from dbo.oriTree('S')
RETURNS TABLE
AS
RETURN(
WITH Subtree(f1,f2)
AS
(
SELECT f1,f2
FROM t
WHERE f1= @f2
UNION ALL
SELECT f1,f2
FROM t AS e
join Subtree AS es
ON e.f1= es.f2
)
SELECT * FROM Subtree
)
GO
Select * from dbo.oriTree('S')
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-03-16
展开全部
树形结构的查询。
你需要说明一下, 你的数据库是什么数据库。
Oracle 使用 START WITH CONNECT BY 语句实现树状查询
DB2 与 MySQL 使用 CTE 递归处理来实现。
你需要说明一下, 你的数据库是什么数据库。
Oracle 使用 START WITH CONNECT BY 语句实现树状查询
DB2 与 MySQL 使用 CTE 递归处理来实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sqlserver 应使用with去实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询