有层级的,怎么用sql查询返回结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有层级的,怎么用sql查询返回结果相关的知识,希望对你有一定的参考价值。

字段1是字段2的父级,图中左边是原来的样子,要求返回父级字段1值为‘A’下的所有子级,查询后返回图右边的结果。

参考技术A 层次化查询,即树型结构查询,是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子句合用!
第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符!
参考技术B 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')
参考技术C 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')本回答被提问者和网友采纳
参考技术D 树形结构的查询。
你需要说明一下, 你的数据库是什么数据库。

Oracle 使用 START WITH CONNECT BY 语句实现树状查询

DB2 与 mysql 使用 CTE 递归处理来实现。
第5个回答  2013-03-16 sqlserver 应使用with去实现。

sql 子查询中部分数据有空值,怎么返回0,NULL+数字=null出来不可以

UPDATE A set BYZD10 =((SELECT distinct(JF)
FROM B where VIPBH=V_VIPSET.DM and fx='增加' and LX='99-期末')
+(SELECT distinct(JF) FROM B where VIPBH=V_VIPSET.DM and fx='增加'
and LX='00-期初'))

遇到类似问题可以参考这个

comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0的函数IFNULL:

SELECT *,sal+IFNULL(comm,0) FROM emp;

参考技术A

如果是sqlserver ,用 isnull,如果是oracle,用nvl,mysql则用 ifnull

UPDATE A set BYZD10 =(isnull(SELECT  distinct(JF)  
FROM B where VIPBH=V_VIPSET.DM and fx='增加' and LX='99-期末'),0)
+(isnull(SELECT  distinct(JF) FROM B where VIPBH=V_VIPSET.DM and fx='增加'
 and LX='00-期初'),0))

追问

语法错误
消息 156,级别 15,状态 1,第 1 行
关键字 'SELECT' 附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
')' 附近有语法错误。
消息 102,级别 15,状态 1,第 4 行
',' 附近有语法错误。

追答UPDATE A set BYZD10 =isnull((SELECT  distinct(JF)  
FROM B where VIPBH=V_VIPSET.DM and fx='增加' and LX='99-期末'),0)
+isnull((SELECT  distinct(JF) FROM B where VIPBH=V_VIPSET.DM and fx='增加'
 and LX='00-期初'),0))

以上是关于有层级的,怎么用sql查询返回结果的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:想把查询结果作为返回值返回,这个SQL函数该怎么写?返回值类型该填啥?

某sql查询可返回100个结果,我想取出指定几个位置(比如第3,5,8,10,12)的结果,该怎么写?

sql 查询时有空值返回0怎么写

sql怎么用查询结果作为条件进行查询

易语言中如何从SQL查询中返回结果?

sql 子查询返回的值不止一个怎么解决?