sql >> Database teknologi >  >> RDS >> Oracle

Er der en indlejringsgrænse for korrelerede underforespørgsler i nogle versioner af Oracle?

Nylige versioner af Oracle har ikke en grænse, men de fleste ældre versioner af Oracle har en indlejringsgrænse på 1 niveau dybt.

Dette virker på alle versioner:

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

Denne forespørgsel virker i 12c og 18c, men virker ikke i 10g og 11g. (Der er dog mindst én version af 10g, der tillod denne forespørgsel. Og der er en patch til at aktivere denne adfærd i 11g.)

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

Om nødvendigt kan du omgå denne begrænsning med vinduesfunktioner (som du kan bruge i SQL Server også :)

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. Postgres UNIK BEGRÆNSNING for array

  2. Hvordan får du din database til at tale mange sprog?

  3. Vil UUID som primær nøgle i PostgreSQL give dårlig indeksydelse?

  4. Problemer med konfiguration af transaktionslog