sql >> データベース >  >> RDS >> Oracle

一部のバージョンのOracleでは、相関サブクエリにネスト制限がありますか?

    Oracleの最近のバージョンには制限がありませんが、Oracleのほとんどの古いバージョンには1のネスト制限があります。 レベルが深い。

    これはすべてのバージョンで機能します:

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

    このクエリは12cと18cで機能しますが、10gと11gでは機能しません。 (ただし、このクエリを許可した10gのバージョンが少なくとも1つあります。また、11gでこの動作を有効にするパッチがあります。)

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

    必要に応じて、ウィンドウ関数(SQL Serverで使用できます)を使用してこの制限を回避できます。 あまりにも:)

    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. MySQL DATEDIFF()とTIMESTAMPDIFF():違いは何ですか?

    2. 休止状態のネイティブクエリでMySQL割り当て演算子(:=)を使用するにはどうすればよいですか?

    3. SQLServerのメッセージ512「サブクエリが複数の値を返しました」を修正

    4. CURRENT_DATE / CURDATE()がデフォルトのDATE値として機能しない