【问题标题】:Hierarchial SQL Query分层 SQL 查询
【发布时间】:2010-11-24 03:07:08
【问题描述】:

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

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) 向上遍历 Customer 表(通过 ManagerID),直到我们找到没有 ManagerID 的 Customer。 (导演)

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

谁能帮帮我?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    类似的东西,但未经测试。

    基于 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
    

    【讨论】:

    • +1 - CTE 是从 SQL Server 2005 开始构建层次结构的方法
    • 我稍微调整了一下,让它工作了,谢谢。是否可以使用 LINQ 进行此查询?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多