1

自己参照テーブル (Customers) と、そのテーブル (Companies) の 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 のない Customer が見つかるまで、(ManagerID を介して) Customer テーブルを上に移動します。(ディレクター)

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 に答える