如何选择公司及其子公司的所有员工?
使用SQL Server 2008
员工
Id | Name | CompanyId
公司
Id | Name | ParentCompanyId
示例:
1 Microsoft 0
2 Microsoft India 1
3 Microsoft Spain 1
我在下面的查询中仅提供来自Microsoft的员工,而不是来自Microsoft India&西班牙。
SELECT Id, Name FROM Employee WHERE CompanyId=1
我不擅长SQL。帮助我。
答案 0 :(得分:7)
使用CTE构建公司层次结构,然后将其连接回Employees表:
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
如果要对语句进行参数化,还可以将CompanyId
变量替换为CTE的锚点部分:
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,现在添加了层次结构级别。
答案 1 :(得分:1)
yum install jdk
答案 2 :(得分:0)
这对于查询是正确的,因为您只询问公司ID为1的记录。
你必须写这样的查询。
SELECT Id, Name FROM Employee WHERE CompanyId in (SELECT Id FROM Company)
现在我已经尝试了上面的内容,它可以执行您需要的查询。但是对于基于Comapny / ParentCompany的预期结果,请尝试以下查询。
SELECT e.Id, e.Names FROM Employee e WHERE e.CompanyId = 1
or e.CompanyId in (SELECT c.Id FROM Company c where c.ParentCompanyId = 1)
希望这有帮助。