繁体   English   中英

获取父子记录SQL Server 2008

[英]Get Parent Child records sql server 2008

我有如下的COMPANY表

 CompanyID  CompanyName

 1           xyz
 2           xyz-c
 3           xyz-c1
 4           xyz-c2
 5           xyz-c-c
 6           xyz-c-c1
 7           xyz-c-c2
 8           xyz-c-c1-c
 9           xyz-c-c1-c1
10           xyz-c-c1-c2 

我有一个如下的COMPANYMAPPING表

 CompanyMapID   ParentCompanyID ChildCompanyID
  1                 1               2               
  2                 1               3               
  3                 1               4               
  4                 2               5               
  5                 2               6               
  6                 2               7               
  7                 6               8               
  8                 6               9               
  9                 6               10              
 10                 11              12  

我想通过使用上面的2个表来获取每个公司的子公司记录,恰好我想得到如下的结果

 CompanyID   CompanyName         Level
 1               xyz              0
 2               xyz-c            1
 3               xyz-c1           1
 4               xyz-c2           1
 5               xyz-c-c          2
 6               xyz-c-c1         2
 7               xyz-c-c2         2
 8               xyz-c-c1-c       3
 9               xyz-c-c1-c1      3
10               xyz-c-c1-c2      3

我经历了一些递归CTE的问题,但不适合这样做,我有多组父子记录(多个级别),因此我需要查询才能按顺序提取所有记录

with cte as (
    select C.CompanyID, 0 as Level
    from COMPANY as C
    where C.CompanyID not in (select T.ChildCompanyID from COMPANYMAPPING as T)

    union all

    select C.ChildCompanyID as CompanyID, A.Level + 1 as Level
    from cte as A
        inner join COMPANYMAPPING as C on C.ParentCompanyID = A.CompanyID
)
select
    C.CompanyID, C.CompanyName, A.Level
from cte as A
    inner join COMPANY as C on C.CompanyID = A.CompanyID

sql小提琴演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM