Las versiones recientes de Oracle no tienen un límite, pero la mayoría de las versiones anteriores de Oracle tienen un límite de anidamiento de 1
nivel profundo.
Esto funciona en todas las versiones:
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
Esta consulta funciona en 12c y 18c pero no funciona en 10g y 11g. (Sin embargo, hay al menos una versión de 10g que permitió esta consulta. Y hay un parche para habilitar este comportamiento en 11g).
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
Si es necesario, puede solucionar esta limitación con funciones de ventana (que puede usar en SQL Server
también:)
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