As versões recentes do Oracle não têm um limite, mas a maioria das versões mais antigas do Oracle têm um limite de aninhamento de
1
nível profundo. Isso funciona em todas as versões:
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
Esta consulta funciona em 12c e 18c, mas não funciona em 10g e 11g. (No entanto, existe pelo menos uma versão do 10g que permitia essa consulta. E há um patch para habilitar esse comportamento no 11g.)
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
Se necessário, você pode contornar essa limitação com funções de janela (que você pode usar no
SQL Server
também:) 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