Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy w niektórych wersjach Oracle istnieje limit zagnieżdżania skorelowanych podzapytań?

Najnowsze wersje Oracle nie mają limitu, ale większość starszych wersji Oracle ma limit zagnieżdżenia 1 poziom głęboko.

Działa to we wszystkich wersjach:

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

To zapytanie działa w 12c i 18c, ale nie działa w 10g i 11g. (Jednak istnieje co najmniej jedna wersja 10g, która zezwala na to zapytanie. Jest też poprawka, która umożliwia to zachowanie w 11g.)

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

W razie potrzeby możesz obejść to ograniczenie za pomocą funkcji okna (których możesz używać w SQL Server też:)

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. Oracle Big Data SQL

  2. Czy konieczne jest wyrzucenie DbCommand po użyciu?

  3. Jak rejestrować/śledzić wywołania procedury składowanej Oracle z wartościami parametrów?

  4. Konwertuj typ danych znacznika czasu na znacznik czasu uniksa Oracle

  5. Jak szyfrować dane w Oracle za pomocą PL SQL?