Oracle
 sql >> база данни >  >> RDS >> Oracle

Има ли ограничение за влагане на корелирани подзаявки в някои версии на Oracle?

Последните версии на Oracle нямат ограничение, но повечето по-стари версии на Oracle имат ограничение за влагане от 1 ниво дълбоко.

Това работи на всички версии:

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

Тази заявка работи в 12c и 18c, но не работи в 10g и 11g. (Има обаче поне една версия на 10g, която позволява тази заявка. И има корекция, която позволява това поведение в 11g.)

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

Ако е необходимо, можете да заобиколите това ограничение с функции на прозореца (които можете да използвате в SQL Server също :)

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. Lighty за Oracle

  2. как да конвертирате csv в таблица в oracle

  3. Как да архивирате RAC VM

  4. Как да свържете Airflow към базата данни на Oracle

  5. Правилният начин за предоставяне на достъп на потребителите до допълнителни схеми в Oracle