我有一个自引用表(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)找到与该客户相关的公司。
任何人都可以帮助我吗?
感谢。
答案 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