zoukankan      html  css  js  c++  java
  • SQL Server 实现递归查询

    从SQL Server 2005开始,就可支持通用表表达式(CTE)创建递归查询。下面先创建一个测试表和一些测试数据

    1.创建一个测试表。

    USE [MASTER]
    CREATE TABLE [dbo].[TB_COLUMN_TEST](
        [F_ID] [int] NOT NULL,
        [F_NAME] [nvarchar](20) NOT NULL,
        [F_DESC] [nvarchar](100) NULL,
        [F_PARENTID] [int] NULL
    ) ON [PRIMARY]
    GO

    2.新增一些测试数据,并查看表数据。

    DELETE [TB_COLUMN_TEST]
    INSERT INTO [TB_COLUMN_TEST] VALUES (1,'测试栏目1','测试栏目描述1',NULL)
    INSERT INTO [TB_COLUMN_TEST] VALUES (2,'测试栏目2','测试栏目描述2',NULL)
    INSERT INTO [TB_COLUMN_TEST] VALUES (3,'测试栏目1-1','测试栏目描述1-1',1)
    INSERT INTO [TB_COLUMN_TEST] VALUES (4,'测试栏目1-2','测试栏目描述1-2',1)
    INSERT INTO [TB_COLUMN_TEST] VALUES (5,'测试栏目1-1-1','测试栏目描述1-1-1',3)
    INSERT INTO [TB_COLUMN_TEST] VALUES (6,'测试栏目1-1-2','测试栏目描述1-1-2',3)
    INSERT INTO [TB_COLUMN_TEST] VALUES (7,'测试栏目1-2-1','测试栏目描述1-2-1',4)
    INSERT INTO [TB_COLUMN_TEST] VALUES (8,'测试栏目1-2-2','测试栏目描述1-2-2',4)
    INSERT INTO [TB_COLUMN_TEST] VALUES (9,'测试栏目1-1-1-1','测试栏目描述1-1-1-1',5)
    INSERT INTO [TB_COLUMN_TEST] VALUES (10,'测试栏目1-1-1-2','测试栏目描述1-1-1-2',5)
    SELECT * FROM [TB_COLUMN_TEST]

    3.查询“测试栏目1”下面所有子栏目

    WITH TEMP(F_ID,F_NAME,F_DESC,F_PARENTID)
    AS
    (
        --SELECT F_ID,F_NAME,F_DESC,F_PARENTID FROM [TB_COLUMN_TEST] WHERE F_PARENTID=1  --不包括自己
        SELECT F_ID,F_NAME,F_DESC,F_PARENTID FROM [TB_COLUMN_TEST] WHERE F_ID=1 --包括自己
        UNION ALL
        SELECT A.F_ID,A.F_NAME,A.F_DESC,A.F_PARENTID FROM [TB_COLUMN_TEST] A
        INNER JOIN TEMP B 
        ON A.F_PARENTID = B.F_ID
    )
    SELECT F_ID,F_NAME,F_DESC,F_PARENTID FROM TEMP

    查询结果:

  • 相关阅读:
    实现基于C++的动态事件机制(转)
    D3D HLSL 一段代码注释
    directx加载ms3d动画模型
    几种空间分割算法研究之bsp
    IxEngine开发笔记
    使用UVAtlas技术管理贴图
    八叉树
    c#调用C++写的dll导出类,包含继承,重载等详细介绍(转载)
    给自己毕业前的一点任务
    大小端问题
  • 原文地址:https://www.cnblogs.com/tracine0513/p/8547957.html
Copyright © 2011-2022 走看看