有层级的,怎么用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 行
',' 附近有语法错误。
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函数该怎么写?返回值类型该填啥?