Le versioni recenti di Oracle non hanno un limite, ma la maggior parte delle versioni precedenti di Oracle ha un limite di annidamento di 1
livello in profondità.
Funziona su tutte le versioni:
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
Questa query funziona in 12c e 18c ma non funziona in 10g e 11g. (Tuttavia, esiste almeno una versione di 10g che ha consentito questa query. E c'è una patch per abilitare questo comportamento in 11g.)
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
Se necessario, puoi aggirare questa limitazione con le funzioni della finestra (che puoi utilizzare in SQL Server
anche :)
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