Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORACLE Connect por cláusula equivalente no SQL Server


O equivalente do SQL Server 2005+ ao CONNECT BY da Oracle sintaxe de consulta hierárquica é usar um CTE recursivo. O SQL Server 2008 adicionou HierarchyID. Aqui está um exemplo de uma CTE recursiva:
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 

Pesquisando "CTE hierárquico" e/ou "CTE recursivo" no Google, você encontrará vários resultados. Peguei a consulta de exemplo do 4GuysFromRolla.com.

CTEs recursivos agora são padrão ANSI - a sintaxe não era suportada até o Oracle 11g, pelo que entendi.