且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SQL Server中的ORACLE Con​​nect by子句等效

更新时间:2023-02-05 11:04:26

与SQL Server 2005+等效的Oracle CONNECT BY层次查询语法是使用递归CTE. SQL Server 2008添加了 HierarchyID .这是递归CTE的示例:

The SQL Server 2005+ equivalent of Oracle's CONNECT BY hierarchical query syntax is to use a recursive CTE. SQL Server 2008 added HierarchyID. Here's an example of a recursive 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 中获取了示例查询.

Googling "hierarchical CTE" and/or "recursive CTE" will turn up numerous results. I took the example query from the 4GuysFromRolla.com.

递归CTE现在是ANSI标准-据我所知,直到Oracle 11g才支持该语法.

Recursive CTEs are now ANSI standard - the syntax wasn't supported until Oracle 11g as I understand.