sql递归(sql递归查询上级)
本篇文章给大家谈谈sql递归,以及sql递归查询上级对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
SQL数据库实现递归查询的几种代码方法
SQL 数据库 实现递归查询的几种代码方法 表结构
ProductCategory
CategoryID Level ParentCategoryID
数据
T SQL
WITH CategoryTemp(CategoryID ParentCategoryID) 临时表用来保存查到的Category
(
SELECT CategoryID ParentCategoryID FROM ProductCategory WHERE ParentCategoryID= 将所有的第一层查出来作为初始数据 需要查第几层或者哪个ParentCategoryID下面所有的 N层 把ParentCategoryID赋相关的值即可
UNION ALL 查询N层
SELECT pc CategoryID ParentCategoryID FROM ProductCategory pc
LEFT JOIN CategoryTemp ct ON pc ParentCategoryID=ct CategoryID
WHERE ParentCategoryID 因为第一层前面已经查出来了 所以这里把第一层筛选掉
)
SELECT CategoryID ParentCategoryID FROM CategoryTemp
结果
裂键档
如果把ParentCategoryID赋为 结果则为
实例
ID 是否为部门 部门名 上级ID y 部门 y 部门 n 张三 n 李二 y 部门 n 王五 y 部门3 亮贺 n 小三 我想找询 ID 值为 下级的所有人员包括下级部门的所有人员
创建查询函数 create function f_id( @id int 要查询的id )returns @re table(id int level int) as begin declare @l int set @l= insert @re select id @l from 表 where 上级id=@id while @@rowcount begin set @l=@l+ insert @re select a id @l from 表 a join @re b on a 上级id=b id and b level=@l end return end go
调用函数进行查询 select a * from 表 a join f_id( ) b on a id=b id
联合查询
测试数据 create table 表(ID int 是否为部门 char( ) 部门名 varchar( ) 上级ID int) insert 表 select y 部门 union all select y 部门 union all 肆乱 select n 张三 union all select n 李二 union all select y 部门 union all select n 王五 union all select y 部门 union all select n 小三 go
创建查询函数 create function f_id( @id int 要查询的id )returns @re table(id int level int) as begin declare @l int set @l= insert @re select id @l from 表 where 上级id=@id while @@rowcount begin set @l=@l+ insert @re select a id @l from 表 a join @re b on a 上级id=b id and b level=@l end return end go
调用函数进行查询 select a * from 表 a join f_id( ) b on a id=b id go
删除测试 drop table 表 drop function f_id
/* 测试结果
ID 是否为部门 部门名 上级ID n 小三
lishixinzhi/Article/program/MySQL/201311/29557
sql 怎么递归查询的方法:
1.歼此局创建测试表扒渣,createtabletest_connect(idnumber,p_idnumber);
2.插入测试数据,
Insertintotest_connectvalues(1,1);
Insertintotest_connectvalues(2,1);
Insertintotest_connectvalues(3,2);
Insertintotest_connectvalues(4,3);
提交;
3.查询数据表的内容,选择*fromtest_connect,
4.执行递氏让归查询语句,将答案添加到nocycle元素中,就不会有[ora-01436:CONNECTBYerrorintheuserdata]。执行结果如下:
Select*
来自test_connectt
从id=4开始
由nocyclepriort连接。p_id=t.i.
[img]SQL怎么也写成递归形式
函数或过程才可以递瞎敏归。
例如:
/*-- =============================================
-- Author: Yew
-- Create date: 2016-10-26
-- Description: 计野神旅算阶乘
-- test Code-------------
SELECT uf_Factorial(-1)
SELECT uf_Factorial(0)
SELECT uf_Factorial(1)
SELECT uf_Factorial(10)
SELECT uf_Factorial(20) -- 会否溢出?
----History-----------------
-- =============================================*/
CREATE FUNCTION [dbo].[uf_Factorial](
@N INT
) RETURNS BIGINT
AS
BEGIN
IF @N 0
RETURN NULL -- RAISERROR(N'参数N 不能为负')
IF @N = 0
RETURN 1
RETURN dbo.uf_Facctorial(@N - 1) 颂凳* @N --递归
END
关于sql递归和sql递归查询上级的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。