Les versions récentes d'Oracle n'ont pas de limite mais la plupart des anciennes versions d'Oracle ont une limite d'imbrication de 1
niveau profond.
Cela fonctionne sur toutes les versions :
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
Cette requête fonctionne en 12c et 18c mais ne fonctionne pas en 10g et 11g. (Cependant, il existe au moins une version de 10g qui autorise cette requête. Et il existe un correctif pour activer ce comportement dans 11g.)
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
Si nécessaire, vous pouvez contourner cette limitation avec des fonctions de fenêtre (que vous pouvez utiliser dans SQL Server
aussi :)
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