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

Apakah ada batas bersarang untuk subquery yang berkorelasi di beberapa versi Oracle?

Versi terbaru dari Oracle tidak memiliki batas tetapi sebagian besar versi Oracle yang lebih lama memiliki batas bersarang 1 tingkat yang dalam.

Ini berfungsi pada semua versi:

SELECT  (
        SELECT  *
        FROM    dual dn
        WHERE   dn.dummy = do.dummy
        )
FROM    dual do

Kueri ini berfungsi di 12c dan 18c tetapi tidak berfungsi di 10g dan 11g. (Namun, setidaknya ada satu versi 10g yang mengizinkan kueri ini. Dan ada tambalan untuk mengaktifkan perilaku ini di 11g.)

SELECT  (
        SELECT  *
        FROM    (
                SELECT  *
                FROM    dual dn
                WHERE   dn.dummy = do.dummy
                )
        WHERE   rownum = 1
        )
FROM    dual do

Jika perlu, Anda dapat mengatasi batasan ini dengan fungsi jendela (yang dapat Anda gunakan di SQL Server juga :)

SELECT  *
FROM    (
        SELECT  m.material_id, ROW_NUMBER() OVER (PARTITION BY content_id ORDER BY resolution DESC) AS rn
        FROM    mat m
        WHERE   m.material_id IN
                (
                SELECT  con.content_id
                FROM    con_groups
                JOIN    con
                ON      con.content_id = con_groups.content_id
                WHERE   con_groups.content_group_id = 10
                )
        )
WHERE   rn = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penyedia Oracle untuk Oledb hilang di VS 2015 Shell

  2. Di mana Database Bug Oracle?

  3. 2 Fungsi yang Mendapatkan Hari, Bulan, dan Tahun dari Tanggal di Oracle

  4. Hal-hal yang harus Anda ketahui tentang Tabel FND_LOBS di Aplikasi Oracle

  5. cara menggunakan dbms_scheduler untuk menjalankan pekerjaan setiap 30 menit