Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Đệ quy trong Oracle

WITH    Ancestor(arg1, arg2) AS
        (
        SELECT  p.arg1, p.arg2
        FROM    parent p
        WHERE   arg2 NOT IN
        (
            SELECT  arg1
            FROM    parent
        )

        UNION ALL

        SELECT  p.arg1, a.arg2
        FROM    Ancestor a 
        JOIN    parent p
        ON      p.arg2 = a.arg1
        )
SELECT  *
FROM    Ancestor

Oracle chỉ hỗ trợ CTE đệ quy kể từ 11g Phát hành 2.

Trong các phiên bản cũ hơn, hãy sử dụng CONNECT BY mệnh đề:

SELECT  arg1, CONNECT_BY_ROOT arg2
FROM    parent
START WITH
        arg2 NOT IN
        (
        SELECT  arg1
        FROM    parent
        )
CONNECT BY
        arg2 = PRIOR arg1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Nhập tệp CSV

  2. Làm cách nào để sử dụng một tham số động trong mệnh đề IN của truy vấn có tên JPA?

  3. Thứ tự đánh giá mệnh đề Oracle SQL

  4. Lỗi:ORA-01704:chuỗi ký tự quá dài

  5. LISTAGG trong Oracle để trả về các giá trị riêng biệt