gpt4 book ai didi

sql - 选择父子记录

转载 作者:行者123 更新时间:2023-12-01 09:30:54 26 4
gpt4 key购买 nike

我如何选择一家公司及其子公司的所有员工?

使用 SQL Server 2008

员工

Id | Name | CompanyId  

公司
Id | Name | ParentCompanyId  

例子:

1 微软 0

2 微软印度 1

3 微软西类牙 1

我有以下查询,它只提供来自微软的员工,而不是来自微软印度和西类牙的员工。
SELECT Id, Name FROM Employee WHERE CompanyId=1

我不擅长 SQL。帮我解决这个问题。

最佳答案

使用 CTE 构建公司层次结构,然后将其连接回员工表:

with CompanyHierarchy as
(
select Id
from Company
where Id = 1
union all
select c.Id
from Company c
inner join CompanyHierarchy ch on c.ParentCompanyId = ch.Id
)
select e.*
from CompanyHierarchy ch
inner join Employees e on ch.Id = e.CompanyId

SQL Fiddle with demo .

您也可以用 CompanyId 代替如果要参数化语句,请将变量添加到 CTE 的 anchor 部分:
with CompanyHierarchy as
(
select Id
from Company
where Id = @CompanyId
union all
select c.Id
from Company c
inner join CompanyHierarchy ch on c.ParentCompanyId = ch.Id
)
select e.*
from CompanyHierarchy ch
inner join Employees e on ch.Id = e.CompanyId

SQL Fiddle with demo ,现在添加了层次结构级别。

关于sql - 选择父子记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15461661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com