5

SQL Server 中是否有与 Oracle 的 CONNECT BY 等效的子句。使用 parentId 字段构建类别树的要求。

4

2 回答 2

9

SQL Server 2005+ 等效于 Oracle 的CONNECT BY分层查询语法是使用递归 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 回答