Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Gibt es in einigen Versionen von Oracle ein Verschachtelungslimit für korrelierte Unterabfragen?

Neuere Versionen von Oracle haben kein Limit, aber die meisten älteren Versionen von Oracle haben ein Verschachtelungslimit von 1 Ebene tief.

Dies funktioniert auf allen Versionen:

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

Diese Abfrage funktioniert in 12c und 18c, aber nicht in 10g und 11g. (Es gibt jedoch mindestens eine Version von 10g, die diese Abfrage erlaubt. Und es gibt einen Patch, um dieses Verhalten in 11g zu aktivieren.)

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

Bei Bedarf können Sie diese Einschränkung mit Fensterfunktionen umgehen (die Sie in SQL Server verwenden können auch :)

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