Home Database Mysql Tutorial SQL Server进行递归查询实现方法

SQL Server进行递归查询实现方法

Jun 07, 2016 pm 05:49 PM
sqlserver recursive query

本文章收藏了二种关于SQL Server进行递归查询实现,有需要的朋友可参考一下。

以表Deparment为例

表结构为:

Id 部门内码,

DeptCode 部门编码,

ParentDeptId 上级部门内码

使用T-SQL:

 代码如下 复制代码

with Dep as
(
    select Id,DeptCode,DeptName from Department where Id=1
    union all
    select d.Id,d.DeptCode,d.DeptName from Dep
    inner join Department d on dep.Id = d.ParentDeptId
)

select * from Dep 简单解释一下:with as属于sql server新特性CTE(Common Table Expression)的关键字,用来储存临时结果集。常用于代替子查询。本例中可以理解为,找出Id=1的记录后,存放在临时表Dept中,然后临时表和Department进行内连接,找出它的子记录。子记录和第一条记录union后作为Dept新的结果集继续进行内连接,找出新的子记录。

使用PL/SQL:

 代码如下 复制代码
select Id,DeptCode,DeptName
from Department
start with Id = 1
connect by prior Id = ParentDeptId;

 start with 表示从哪一行记录开始递归查询,即根节点
connect by 表示进行递归,后面跟递归条件
prior 表示前一条记录,表示上一条记录的Id = 下一条记录的ParentDeptId
比如上面的SQL语句就可以理解为,以Id 为1的记录为根节点,递归查询下一条记录的ParentDeptId = 前一条记录的Id

实例

 代码如下 复制代码
ID 是否为部门   部门名   上级ID
1       y                       部门0       1
31     y                       部门1       1
32     n                       张三         31
33     n                       李二         31
34     y                       部门2       31
35     n                       王五         34
35     y                       部门3 34
36     n                       小三         35

我想找询   ID   值为   35   下级的所有人员包括下级部门的所有人员 
 

 代码如下 复制代码

--创建查询函数
create   function   f_id(
@id   int --要查询的id
)returns   @re   table(id   int,level   int)
as
begin
declare   @l   int
set   @l=0
insert   @re   select   id,@l
from   表  
where   上级id=@id
while   @@rowcount> 0
begin
set   @l=@l+1
insert   @re   select   a.id,@l
from   表   a   join   @re   b   on   a.上级id=b.id   and   b.level=@l-1
end
return
end
go

--调用函数进行查询
select   a.*   from   表   a   join   f_id(35)   b   on   a.id=b.id


--测试数据

 代码如下 复制代码

create   table   表(ID   int,是否为部门   char(1),部门名   varchar(10),上级ID   int)
insert   表   select   1   , 'y ', '部门0 '   ,1
union   all   select   31, 'y ', '部门1 '   ,1
union   all   select   32, 'n ', '张三 '   ,31
union   all   select   33, 'n ', '李二 '   ,31
union   all   select   34, 'y ', '部门2 ',31
union   all   select   35, 'n ', '王五 '   ,34
union   all   select   35, 'y ', '部门3 ',34
union   all   select   36, 'n ', '小三 '   ,35
go

--创建查询函数
create   function   f_id(
@id   int --要查询的id
)returns   @re   table(id   int,level   int)
as
begin
declare   @l   int
set   @l=0
insert   @re   select   id,@l
from   表  
where   上级id=@id
while   @@rowcount> 0
begin
set   @l=@l+1
insert   @re   select   a.id,@l
from   表   a   join   @re   b   on   a.上级id=b.id   and   b.level=@l-1
end
return
end
go

--调用函数进行查询
select   a.*   from   表   a   join   f_id(35)   b   on   a.id=b.id
go

--删除测试
drop   table   表
drop   function   f_id

/*--测试结果

ID                     是否为部门   部门名                 上级ID                
-----------   -----   ----------   -----------  
36                     n           小三                   35

(所影响的行数为   1   行)
--*/

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to import mdf file into sqlserver How to import mdf file into sqlserver Apr 08, 2024 am 11:41 AM

The import steps are as follows: Copy the MDF file to SQL Server's data directory (usually C:\Program Files\Microsoft SQL Server\MSSQL\DATA). In SQL Server Management Studio (SSMS), open the database and select Attach. Click the Add button and select the MDF file. Confirm the database name and click the OK button.

How to solve the problem that the object named already exists in the sqlserver database How to solve the problem that the object named already exists in the sqlserver database Apr 05, 2024 pm 09:42 PM

For objects with the same name that already exist in the SQL Server database, the following steps need to be taken: Confirm the object type (table, view, stored procedure). IF NOT EXISTS can be used to skip creation if the object is empty. If the object has data, use a different name or modify the structure. Use DROP to delete existing objects (use caution, backup recommended). Check for schema changes to make sure there are no references to deleted or renamed objects.

How to check sqlserver port number How to check sqlserver port number Apr 05, 2024 pm 09:57 PM

To view the SQL Server port number: Open SSMS and connect to the server. Find the server name in Object Explorer, right-click it and select Properties. In the Connection tab, view the TCP Port field.

What to do if the sqlserver service cannot be started What to do if the sqlserver service cannot be started Apr 05, 2024 pm 10:00 PM

When the SQL Server service fails to start, here are some steps to resolve: Check the error log to determine the root cause. Make sure the service account has permission to start the service. Check whether dependency services are running. Disable antivirus software. Repair SQL Server installation. If the repair does not work, reinstall SQL Server.

How to recover accidentally deleted database in sqlserver How to recover accidentally deleted database in sqlserver Apr 05, 2024 pm 10:39 PM

If you accidentally delete a SQL Server database, you can take the following steps to recover: stop database activity; back up log files; check database logs; recovery options: restore from backup; restore from transaction log; use DBCC CHECKDB; use third-party tools. Please back up your database regularly and enable transaction logging to prevent data loss.

Where is the sqlserver database? Where is the sqlserver database? Apr 05, 2024 pm 08:21 PM

SQL Server database files are usually stored in the following default location: Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data The database file location can be customized by modifying the database file path setting.

How to solve Java connection SqlServer error How to solve Java connection SqlServer error May 01, 2023 am 09:22 AM

The problem was found that this time I was using the SqlServer database, which I had not used before, but the problem was not serious. After I connected the SqlServer according to the steps in the requirements document, I started the SpringBoot project and found an error, as follows: At first I thought it was a SqlServer connection. There was a problem, so I went to check the database and found that everything was normal. I first asked my colleagues if they had such a problem, and found that they did not, so I started my best part, facing Baidu. programming. The specific error message I started to solve was this, so I started Baidu error reporting: ERRORc.a.d.p.DruidDataSource$CreateCo

How to delete sqlserver if the installation fails? How to delete sqlserver if the installation fails? Apr 05, 2024 pm 11:27 PM

If the SQL Server installation fails, you can clean it up by following these steps: Uninstall SQL Server Delete registry keys Delete files and folders Restart the computer

See all articles