【问题标题】:ORACLE Connect by clause equivalent in SQL ServerSQL Server 中的 ORACLE Con​​nect by 子句等效
【发布时间】:2011-01-13 03:00:51
【问题描述】:

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

【问题讨论】:

    标签: sql sql-server oracle tsql hierarchical-data


    【解决方案1】:

    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 才支持该语法。

    【讨论】:

      【解决方案2】:

      MS SQL Server 2008 中有HierarchyID 数据类型,可以让您的生活更轻松。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-07
        • 2015-07-09
        • 2012-02-19
        • 2021-12-13
        • 1970-01-01
        相关资源
        最近更新 更多