分层SQL查询

时间:2009-08-30 11:07:27

标签: sql sql-server-2005 tsql recursion hierarchy

我有一个自引用表(Customers)和一个表,该表将链接到该表(公司)中的一条记录,即

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

ManagerID引用Customer表中的另一条记录。

我需要执行查询,通过给定特定的客户ID,它将找到客户所属的公司。如果我在C#中这样做,它会看起来像(这是示例代码,不起作用):

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

所以有两个步骤:

1)遍历Customer表(通过ManagerID),直到找到没有ManagerID的Customer。 (主任)

2)找到与该客户相关的公司。

任何人都可以帮助我吗?

感谢。

1 个答案:

答案 0 :(得分: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