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