sql >> データベース >  >> RDS >> Oracle

SQLServerで同等のORACLEConnectby句

    SQLServer2005以降のOracleのCONNECT BYに相当します 階層クエリ構文は、再帰CTEを使用することです。 SQLServer2008は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標準になりました。私が理解しているように、構文はOracle11gまでサポートされていませんでした。



    1. Oracleで2列のデータをA、B形式で取得する方法

    2. SQL:データベース内のすべてのvarchar列で文字列を検索します

    3. ディレクトリ内のファイルのリストを見つける際の問題

    4. PostgreSQLエラー:リレーションはすでに存在します