sql >> Databasteknik >  >> RDS >> Oracle

Finns det en kapslingsgräns för korrelerade underfrågor i vissa versioner av Oracle?

Senaste versioner av Oracle har ingen gräns men de flesta äldre versioner av Oracle har en kapslingsgräns på 1 nivå djup.

Detta fungerar på alla versioner:

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

Den här frågan fungerar i 12c och 18c men fungerar inte i 10g och 11g. (Det finns dock minst en version av 10g som tillåtit den här frågan. Och det finns en patch för att aktivera detta beteende i 11g.)

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

Om det behövs kan du kringgå denna begränsning med fönsterfunktioner (som du kan använda i SQL Server också:)

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. Vad är DTU i Azure SQL Database och hur man räknar ut hur mycket vi behöver

  2. Lägg till sökningssortering och sök med jquery datatable

  3. Hur IFNULL() fungerar i MariaDB

  4. Finns det någon hash-funktion i PL/SQL?