2009-08-30 6 views
1

나는 자체 참조 테이블 (고객)과 해당 테이블 (회사)에 하나 개의 레코드로 연결됩니다 테이블 즉계층 적 SQL 쿼리

Customers  Companies 
*********  ********* 
ID    ID 
ManagerID --> DirectorID 

ManagerID를가 고객 테이블에서 다른 레코드로 의미가있다.

특정 고객 ID가 주어지면 고객이 속한 회사를 찾을 수있는 쿼리를 수행해야합니다.

public static Company FindCompany(Customer customer) 
{ 
    while (customer.ManagerID != null) 
    { 
      customer = customer.GetManager(); 
    } 
    return Company.FindByDirector(customer.ID); 
} 

그래서 2 단계가 있습니다 :

1)를 트래버스 고객 테이블 (ManagerID를 통해 나는 C#에서이 작업을 수행 할 수 있었다면 그것은 뭔가를 (이, 기능 샘플 코드가 아닙니다) 볼 것) ManagerID가없는 고객을 찾을 때까지 (감독)

2) 해당 고객과 관련된 회사를 찾으십시오.

아무도 도와 줄 수 있습니까?

감사합니다.

답변

3

테스트를 거친 것처럼 보입니다.

는 CTE를 Recursive Queries Using Common Table Expressions

WITH cTE AS 
(
    SELECT --Get manager of given customer 
     ManagerID 
    FROM 
     Customers 
    WHERE 
     ID = @MyCustomerID 
    UNION ALL 
    SELECT --Get manager of the manager etc 
     Customers.ManagerID 
    FROM 
     cTE 
     JOIN 
     Customers ON cTE.ManagerID = Customers.ID 
) 
SELECT 
    * 
FROM 
    cTE 
    JOIN 
    Company ON cTE.ManagerID = Company.DirectorID 
+2

+1을 바탕으로 - CTE는 내가 조금이 불통 감사를 작동하는 데있어 이후 건물에 대한 SQL Server 2005의 갈 길 계층 구조 –

+0

있습니다. LINQ를 사용하여이 쿼리를 사용할 수 있습니까? – James

+0

@James : 죄송합니다. 잘 모르겠습니다. – gbn