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

Tại sao CONNECT BY LEVEL trên bảng trả về các hàng thừa?

Trong truy vấn đầu tiên, bạn chỉ kết nối theo cấp độ. Vì vậy, nếu cấp độ <=1, bạn nhận được mỗi bản ghi 1 lần. Nếu cấp độ <=2, thì bạn nhận được mỗi cấp độ 1 lần (đối với cấp độ 1) + N lần (với N là số bản ghi trong bảng). Nó giống như bạn đang tham gia chéo, bởi vì bạn chỉ chọn tất cả các bản ghi từ bảng cho đến khi đạt đến cấp độ, mà không có các điều kiện khác để giới hạn kết quả. Đối với cấp độ <=3, điều này được thực hiện lại cho từng kết quả đó.

Vì vậy, đối với 3 bản ghi:

  • Bản ghi Lvl 1:3 (tất cả đều có cấp độ 1)
  • Bản ghi cấp độ 2:3 có bản ghi cấp độ 1 + 3 * 3 có cấp độ 2 =12
  • Lvl 3:3 + 3 * 3 + 3 * 3 * 3 =39 (thực tế, mỗi bản ghi có 13 bản ghi).
  • Lvl 4:bắt đầu thấy một hình mẫu? :)

Nó không thực sự là một tham gia chéo. Kết nối chéo sẽ chỉ trả về những bản ghi có mức 2 trong kết quả truy vấn này, trong khi với kết nối này, bạn nhận được các bản ghi có mức 1 cũng như các bản ghi có mức 2, do đó dẫn đến 3 + 3 * 3 thay vì chỉ Bản ghi 3 * 3.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kết nối bằng mệnh đề trong regex_substr

  2. Tạo chuỗi UUID không có REGEXP_REPLACE và PL / SQL

  3. Ngữ nghĩa của ResultSet # getDate ()

  4. Cách bật tiện ích mở rộng cho oci8 (Oracle) trong php.ini - Cảnh báo PHP:Khởi động PHP:ở dòng 0

  5. OracleParameter và Mệnh đề IN