sql >> Databáze >  >> RDS >> Oracle

Existuje v některých verzích Oracle limit vnoření pro korelované poddotazy?

Nejnovější verze Oracle nemají limit, ale většina starších verzí Oracle má limit vnoření 1 úroveň hluboko.

Toto funguje na všech verzích:

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

Tento dotaz funguje v 12c a 18c, ale nefunguje v 10g a 11g. (Nicméně existuje alespoň jedna verze 10g, která tento dotaz umožňovala. A existuje záplata, která toto chování umožňuje v 11g.)

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

V případě potřeby můžete toto omezení obejít pomocí okenních funkcí (které můžete použít v SQL Server taky :)

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. Změňte oddělovač funkce WM_CONCAT Oracle 11gR2

  2. SQL WHERE.. IN klauzule více sloupců

  3. Hromadné vkládání s textovým kvalifikátorem na SQL Server

  4. Jak používat array_agg() pro varchar[]