• sqlserver 递归查询


    1.首先创建临时表模拟数据

     1 IF OBJECT_ID('tempdb.dbo.#Company') IS NOT NULL DROP TABLE #Company;
     2 CREATE TABLE #Company
     3 (
     4     CompanyID INT NOT NULL
     5     PRIMARY KEY,
     6     ParentCompanyID INT NULL,
     7     CompanyName VARCHAR(25) NOT NULL
     8 );
     9 INSERT #Company
    10 (CompanyID, ParentCompanyID, CompanyName)
    11     VALUES (1, NULL, 'Mega-Corp'),
    12     (2, 1, 'Mediamus-Corp'),
    13     (3, 1, 'KindaBigus-Corp'),
    14     (4, 3, 'GettinSmaller-Corp'),
    15     (5, 4, 'Smallest-Corp'),
    16     (6, 5, 'Puny-Corp'),
    17     (7, 5, 'Small2-Corp');
    18 
    19 select * from #Company

    递归查询语句

     1 WITH CompanyTree(ParentCompanyID, CompanyID, CompanyName, CompanyLevel) AS
     2 (
     3 -- Anchor Member
     4 SELECT ParentCompanyID,
     5         CompanyID,
     6         CompanyName,
     7         0 AS CompanyLevel
     8 FROM #Company
     9 WHERE ParentCompanyID IS NULL
    10 UNION ALL
    11 -- Recursive Member
    12 SELECT c.ParentCompanyID,
    13         c.CompanyID,
    14         c.CompanyName,
    15         p.CompanyLevel + 1
    16 FROM #Company c
    17     INNER JOIN CompanyTree p
    18     ON c.ParentCompanyID = p.CompanyID
    19 )
    20 SELECT ParentCompanyID,
    21     CompanyID,
    22     CompanyName,
    23     CompanyLevel
    24     FROM CompanyTree;

    结果展示

    查询过程分析

  • 相关阅读:
    深入理解JVM
    深入理解JVM
    vim
    Java多线程编程核心
    (1)Java多线程编程核心——Java多线程技能
    css3-2
    Iptables教程
    自动化部署脚本
    NEC css规范
    mix-blend-mode 混合模式 background-blend-mode 背景混合模式 isolation:isolate 隔离
  • 原文地址:https://www.cnblogs.com/Spinoza/p/15437655.html
Copyright © 2020-2023  润新知