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

    查询结果:

  • 相关阅读:
    从veth看虚拟网络设备的qdisc
    深入学习golang(5)—接口
    深入学习golang(4)—new与make
    深入学习golang(3)—类型方法
    深入学习golang(2)—channel
    深入学习golang(1)—数组与切片
    Docker实践(6)—CentOS7上部署Kubernetes
    CoreOS实践(2)—在coreos上安装Kubernetes
    Docker实践(5)—资源隔离
    CoreOS实践(1)—CoreOS初体验
  • 原文地址:https://www.cnblogs.com/tracine0513/p/8547957.html
Copyright © 2011-2022 走看看