1

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

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);
}

所以有2个步骤:

1) 向上遍历客户表(通过 ManagerID),直到我们找到没有 ManagerID 的客户。(导演)

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

谁能帮我吗?

谢谢。

4

1 回答 1

3

像这样的东西,虽然未经测试。

基于 CTE使用公用表表达式的递归查询

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
于 2009-08-30T11:44:45.453 回答