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递归查询上级的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表