5

会社とその子会社のすべての従業員を選択するにはどうすればよいですか?

SQL Server 2008 の使用

従業員

Id | Name | CompanyId  

会社

Id | Name | ParentCompanyId  

例:

1 マイクロソフト 0

2 マイクロソフト インド 1

3 マイクロソフト スペイン 1

Microsoft India & Spain ではなく、Microsoft の従業員のみを提供する以下のクエリがあります。

SELECT Id, Name FROM Employee WHERE CompanyId=1

私はSQLが苦手です。これについて私を助けてください。

4

3 に答える 3

8

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

demo を使用した SQL Fiddle

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

demo を使用した SQL Fiddle に、階層レベルが追加されました。

于 2013-03-17T14:22:57.810 に答える
2
SELECT 
   employee.name,
   company.id 
FROM employee
INNER JOIN company 
On employee.companyId= company.id
WHERE company.id IN (1,2,3)
于 2016-12-07T05:09:32.110 に答える
0

会社 ID が 1 のレコードのみを要求しているため、クエリは正しいです。

このようなクエリを作成する必要があります。

SELECT Id, Name FROM Employee WHERE CompanyId in (SELECT Id FROM Company)

今、私は上記を試しました。これは、指定されたクエリが実行する必要があることを行います。ただし、Company/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)

お役に立てれば。

于 2013-03-17T14:13:53.740 に答える