sql server的递归查询

本文介绍了如何使用SQL Server的递归查询功能来查找某个地区ID下的所有子地区,包括子子地区。通过CTE(公共表表达式)结合UNION ALL,从初始地区开始递归获取所有子级,直到没有更多的子地区为止。关键在于WITH子句的使用和INNER JOIN判断父子关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用到了递归查询,用于地区查询,即传递一个地区的id,使用一条sql语句将传递的这个地区下面所有子地区以及子子地区全部查询出来,这个地区递归查询功能很多地方都会用到,这里记录下来,方便自己和朋友们使用;

sql如下:

WITH temp (areaid) AS (
    SELECT
        areaid
    FROM
        area
    WHERE
        areaid =340000
    UNION ALL
        SELECT
            a.areaid
        FROM
            area a
        INNER JOIN temp ON a.parentid = temp.areaid
) SELECT
    *
FROM
    temp

 

该查询语句的关键字为with as,union all.

该查询语句由两条select查询语句构成,第一条select语句只会执行一次,查出我们传进来的地区id参数对应的地区数据,将查询出来的结果集表赋到temp表中(temp表的表名可以自定义,temp表后面括号中的字段要和查出来的结果集中的字段相对应,并且括号里定义的字段,决定temp表中有哪些字段),然后执行第二条select语句,即   

SELECT
            a.areaid
        FROM
            area a
        INNER JOIN temp ON a.parentid = temp.areaid

这条sql语句就是再一次查询area表,将得到的结果接追加到temp表中(即取结果集和temp的并集),将得到的并集再一次赋到temp表中,然后继续执行

 SELECT
            a.areaid
        FROM
            area a
        INNER JOIN temp ON a.parentid = temp.areaid

语句,又将结果集赋到temp表中,依次内推,知道第二条select语句结果集为空,就停在递归查询,最后执行

SELECT
    *
FROM
    temp

即查询最终得到的temp表中的所有数据,得到的结果集就是我们需要的数据

(向上递归和向下递归,只需要改变 a.parentid = temp.areaid 就行,即决定哪张表为子表,哪张表为父表)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值