sql >> Database >  >> RDS >> Oracle

Is er een nestlimiet voor gecorreleerde subquery's in sommige versies van Oracle?

Recente versies van Oracle hebben geen limiet, maar de meeste oudere versies van Oracle hebben een nestlimiet van 1 niveau diep.

Dit werkt op alle versies:

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

Deze query werkt in 12c en 18c, maar niet in 10g en 11g. (Er is echter ten minste één versie van 10g die deze zoekopdracht mogelijk maakte. En er is een patch om dit gedrag in 11g mogelijk te maken.)

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

Indien nodig kunt u deze beperking omzeilen met vensterfuncties (die u kunt gebruiken in SQL Server ook :)

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. Caching van tijdelijke objecten van SQL Server

  2. Wat veroorzaakt Meer wordt niet herkend... fout bij het uitvoeren van Postgresql 11 op een Windows-computer?

  3. Top back-uptools voor PostgreSQL

  4. Reverse Engineering van een MySQL-database met MySQL Workbench