sql >> Database >  >> RDS >> Oracle

ORACLE Connect by clausule equivalent in SQL Server

Het SQL Server 2005+ equivalent van Oracle's CONNECT BY hiërarchische querysyntaxis is om een ​​recursieve CTE te gebruiken. SQL Server 2008 hiërarchie-ID toegevoegd. Hier is een voorbeeld van een recursieve 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 

Googlen op "hiërarchische CTE" en/of "recursieve CTE" levert tal van resultaten op. Ik nam de voorbeeldquery van 4GuysFromRolla.com.

Recursieve CTE's zijn nu ANSI-standaard - de syntaxis werd niet ondersteund tot Oracle 11g, zoals ik begrijp.



  1. MySQL PHP-incompatibiliteit

  2. Wat is de limiet van SQL-variabelen die men kan specificeren in een enkele execSQL-query?

  3. SqlCommand hergebruiken?

  4. Hoe de LEFT()-functie werkt in SQL Server (T-SQL)