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

Truy vấn phân cấp Oracle

bạn có thể đạt được kết quả mong muốn với kết nối bằng (và hàm CONNECT_BY_ROOT trả về giá trị cột của nút gốc):

SQL> WITH users AS (
  2     SELECT 1 user_id, (null) PARENT FROM dual
  3     UNION ALL SELECT 2, 1 FROM dual
  4     UNION ALL SELECT 3, 1 FROM dual
  5     UNION ALL SELECT 4, 3 FROM dual
  6  ), permissions AS (
  7     SELECT 'A' permission, 1 user_id FROM dual
  8     UNION ALL SELECT 'B', 3 FROM dual
  9  )
 10  SELECT lpad('*', 2 * (LEVEL-1), '*')||u.user_id u,
 11         u.user_id, connect_by_root(permission) permission
 12    FROM users u
 13    LEFT JOIN permissions p ON u.user_id = p.user_id
 14  CONNECT BY u.PARENT = PRIOR u.user_id
 15   START WITH p.permission IS NOT NULL
 16  ORDER SIBLINGS BY user_id;

U         USER_ID PERMISSION
--------- ------- ----------
3               3 B
**4             4 B
1               1 A
**2             2 A
**3             3 A
****4           4 A


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di chuyển dữ liệu từ oracle sang HDFS, xử lý và chuyển sang Teradata từ HDFS

  2. Sự cố khi gọi thủ tục được lưu trữ từ C # với CLOB lớn

  3. Sự khác biệt giữa TRUNCATE và DELETE?

  4. 5 cách cập nhật dữ liệu bằng truy vấn con trong Oracle SQL

  5. Khi nào Oracle lập chỉ mục giá trị cột rỗng?