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

    查询结果:

  • 相关阅读:
    2
    1
    Java面试题整理二(侧重SSH框架)
    solr添加多个core
    Oracle SQL性能优化
    jQuery的$.ajax
    spring四种依赖注入方式
    通过JAXB完成Java对象与XML之间的转换
    window环境下将solr6.3部署到tomcat中
    Java面试题整理一(侧重多线程并发)
  • 原文地址:https://www.cnblogs.com/tracine0513/p/8547957.html
Copyright © 2011-2022 走看看