SQL Server 中是否有与 Oracle 的 CONNECT BY 等效的子句。使用 parentId 字段构建类别树的要求。
12952 次
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 回答