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

Mối quan hệ lồng nhau của Oracle SQL thành một cấp

Tôi không chắc liệu mình có hiểu đầy đủ logic mà bạn đang cố gắng triển khai hay không, nhưng đây là SQL tạo bảng của bạn và sao chép đầu ra mẫu của bạn. Nó đã được thử nghiệm trên https://livesql.oracle.com

Vui lòng hiểu điều này với một chút muối vì nếu dữ liệu của bạn có thể có các hàng hoặc chu trình trùng lặp hoặc không có gì, điều này không được thể hiện trong ví dụ của bạn, thì truy vấn có thể cần được sửa đổi.

Dàn ý:

  1. Trong mệnh đề "with", chúng tôi xoay "ColumnA" và "ColumnB" thành một cột duy nhất và thêm col_src để giữ nguyên "ColumnAB" mới là cột nào.

  2. Sau đó, chúng tôi truy vấn đệ quy, kết nối bằng cột D phù hợp và cột A / B khớp với cột C trước đó.

  3. Để phù hợp với thứ tự được cung cấp, chúng tôi sắp xếp theo:

    • mức đệ quy
    • cột C
    • nguồn là cột A hay B
    • giá trị của cột A hoặc B
create table mytable as
select 'A' "ColumnA",'B' "ColumnB",'C' "ColumnC",'E' "ColumnD" from dual
union select 'D' "ColumnA",'C' "ColumnB",'F' "ColumnC",'E' "ColumnD" from dual
union select 'C' "ColumnA",'H' "ColumnB",'I' "ColumnC",'E' "ColumnD" from dual
union select 'C' "ColumnA",'W' "ColumnB",'S' "ColumnC",'E1' "ColumnD" from dual
;

with temp as (
    select "ColumnA" as "ColumnAB", "ColumnC", "ColumnD", 'A' as col_src
    from mytable
    union all select "ColumnB", "ColumnC", "ColumnD", 'B' as col_src
    from mytable
)
select connect_by_root("ColumnAB") "ColumnV", "ColumnC" as "ColumnW" from temp
connect by prior "ColumnD" = "ColumnD" and prior "ColumnC" = "ColumnAB"
order by level,"ColumnC",col_src,  "ColumnAB"



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn Oracle sử dụng 'like' trên cột số được lập chỉ mục, hiệu suất kém

  2. Dấu thời gian Oracle, Giá trị tối đa và tối thiểu

  3. Trong SQL, việc sử dụng dấu ngoặc đơn với OR có nghĩa là gì?

  4. Cách gửi email bằng Oracle 10 g Forms

  5. Thủ tục lưu trữ trình tạo số ngẫu nhiên Oracle mà không sử dụng DBMS_RANDOM