如何選擇公司及其子公司的所有員工?選擇父母和子女記錄
使用SQL Server 2008
員工
Id | Name | CompanyId
公司
Id | Name | ParentCompanyId
例子:
1微軟0
2微軟印度1
3微軟西班牙1
我有下面這樣的查詢這給微軟只有員工,而不是來自微軟印度&西班牙。
SELECT Id, Name FROM Employee WHERE CompanyId=1
我不擅長SQL。幫我解決這個問題。
如何選擇公司及其子公司的所有員工?選擇父母和子女記錄
使用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
您也可以替換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,現在添加了層級。
而且,這是因爲你只是要求他的公司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)
希望這會有所幫助。
SELECT
employee.name,
company.id
FROM employee
INNER JOIN company
On employee.companyId= company.id
WHERE company.id IN (1,2,3)
您可以使用[遞歸CTE](http://msdn.microsoft.com/en-us/library/ms186243(v = sql.105).aspx)。 – 2013-03-17 14:20:39
奇怪的是,您只是點擊了投票下來按鈕而不是嘗試查詢。爲什麼不嘗試它,你會得到結果。但是如果你想提供一個母公司的ID,那麼這個故事就不一樣了。我回應了你在這裏問的問題。 – LiaqatG 2013-03-17 14:26:07
@LiaqatG,我沒有投票。不知道誰投了票。請確認,雖然您的答案可能不準確;)無論如何-2爲其他投票下來和+10爲我的投票= = + 8分爲您。 – Billa 2013-03-17 17:14:41