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

Liệt kê các hàng trong một phép nối bên trong

Bạn không cần một phép nối bên trong vào một bảng giả hoặc một hàm phân tích để tạo ra các số hàng; bạn chỉ có thể sử dụng kết nối bằng (và chức năng cấp tương ứng của nó) trên chính bảng, như sau:

WITH tst_dim_ban_selected AS (SELECT 1 ban_key, 'a' cust_fullname, 3 n FROM dual UNION ALL
                              SELECT 2 ban_key, 'b' cust_fullname, 4 n FROM dual)
-- end of mimicking your table with data in it. See SQL below
SELECT db.ban_key,
       db.cust_fullname,
       LEVEL row_num
FROM   tst_dim_ban_selected db
CONNECT BY LEVEL <= db.n
           AND PRIOR db.ban_key = db.ban_key -- assuming this is the primary key
           AND PRIOR sys_guid() IS NOT NULL;

   BAN_KEY CUST_FULLNAME    ROW_NUM
---------- ------------- ----------
         1 a                      1
         1 a                      2
         1 a                      3
         2 b                      1
         2 b                      2
         2 b                      3
         2 b                      4

Nếu bạn có các cột khác ngoài ban_key trong khóa chính của bảng, bạn cần đảm bảo rằng chúng được bao gồm trong danh sách prior <column> = <column> của mệnh đề kết nối S. Điều này để kết nối bằng có thể xác định từng hàng duy nhất, có nghĩa là nó lặp lại chỉ qua hàng đó và không lặp lại hàng khác. PRIOR sys_guid() IS NOT NULL được yêu cầu để ngăn kết nối theo vòng lặp xảy ra.



  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 - regexp_substr để trả về giá trị rỗng

  2. Hàm danh sách ORACLE SQL

  3. Nhận lược đồ Oracle

  4. ORA-01036:tên / số biến không hợp lệ trong khi gọi hàm được lưu trữ

  5. Lỗi- ORA-22835:Bộ đệm quá nhỏ để chuyển đổi CLOB sang CHAR hoặc BLOB sang RAW