5

SQLServerのOracleのCONNECTBYに相当する句はありますか。parentIdフィールドを使用してカテゴリツリーを構築するための要件。

4

2 に答える 2

9

Oracle のCONNECT BY階層クエリ構文に相当する SQL Server 2005+ は、再帰 CTE を使用することです。SQL Server 2008 ではHierarchyIDが追加されました。再帰的な CTE の例を次に示します。

WITH EmployeeHierarchy (EmployeeID, LastName, FirstName, ReportsTo, HierarchyLevel) AS (
   SELECT EmployeeID,
          LastName,
          FirstName,
          ReportsTo,
          1 as HierarchyLevel
     FROM Employees
    WHERE ReportsTo IS NULL
   UNION ALL
   -- Recursive step
   SELECT e.EmployeeID,
          e.LastName,
          e.FirstName,
          e.ReportsTo,
          eh.HierarchyLevel + 1 AS HierarchyLevel
     FROM Employees e
     JOIN EmployeeHierarchy eh ON e.ReportsTo = eh.EmployeeID)
  SELECT *
    FROM EmployeeHierarchy
ORDER BY HierarchyLevel, LastName, FirstName 

「階層 CTE」および/または「再帰 CTE」をグーグルで検索すると、多数の結果が得られます。4GuysFromRolla.comからサンプル クエリを取得しました。

再帰的な CTE は現在 ANSI 標準です。私が理解しているように、この構文は Oracle 11g までサポートされていませんでした。

于 2010-02-04T15:54:38.663 に答える
1

MS SQL Server 2008 にはHierarchyIDデータ型があり、作業が楽になります。

于 2010-02-04T15:14:28.787 に答える