sql >> Database teknologi >  >> RDS >> Oracle

ORACLE Connect by klausul tilsvarende i SQL Server

SQL Server 2005+-ækvivalenten til Oracles CONNECT BY hierarkisk forespørgselssyntaks er at bruge en rekursiv CTE. SQL Server 2008 tilføjede HierarchyID. Her er et eksempel på en rekursiv 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 

Googling af "hierarkisk CTE" og/eller "rekursiv CTE" vil vise adskillige resultater. Jeg tog eksempelforespørgslen fra 4GuysFromRolla.com.

Rekursive CTE'er er nu ANSI-standard - syntaksen blev ikke understøttet før Oracle 11g, som jeg forstår.



  1. Konverter et månedsnavn til månedsnummeret i SQL Server (T-SQL)

  2. Eksempel på APEX_ZIP

  3. Sådan får du MySQL-tabellens primærnøgle til automatisk at stige med et præfiks

  4. Timeout-indstilling for SQL Server