Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengapa CONNECT BY LEVEL pada tabel mengembalikan baris tambahan?

Dalam kueri pertama, Anda terhubung hanya dengan level. Jadi, jika level <=1, Anda mendapatkan setiap catatan 1 kali. Jika level <=2, maka Anda mendapatkan setiap level 1 kali (untuk level 1) + N kali (di mana N adalah jumlah record dalam tabel). Ini seperti Anda bergabung silang, karena Anda hanya mengambil semua catatan dari tabel sampai level tercapai, tanpa memiliki kondisi lain untuk membatasi hasilnya. Untuk level <=3, ini dilakukan lagi untuk setiap hasil tersebut.

Jadi untuk 3 catatan:

  • Rekor Lvl 1:3 (semuanya memiliki level 1)
  • Lvl 2:3 record memiliki level 1 + 3*3 record memiliki level 2 =12
  • Lvl 3:3 + 3*3 + 3*3*3 =39 (memang, masing-masing 13 record).
  • Lvl 4:mulai melihat pola? :)

Ini sebenarnya bukan gabungan silang. Penggabungan silang hanya akan mengembalikan catatan yang memiliki level 2 dalam hasil kueri ini, sementara dengan koneksi ini, Anda mendapatkan catatan yang memiliki level 1 serta catatan yang memiliki level 2, sehingga menghasilkan 3 + 3*3 alih-alih hanya Catatan 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. Apakah Oracle memiliki konsep indeks yang difilter?

  2. 2 Cara Menghapus Baris Duplikat di Oracle

  3. Skrip untuk menemukan dependensi multi level dari suatu paket

  4. Koleksi PL/SQL:Tabel Bersarang di Database Oracle

  5. Alat Pemulihan Kehilangan Data Nol