Senaste versioner av Oracle har ingen gräns men de flesta äldre versioner av Oracle har en kapslingsgräns på 1
nivå djup.
Detta fungerar på alla versioner:
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
Den här frågan fungerar i 12c och 18c men fungerar inte i 10g och 11g. (Det finns dock minst en version av 10g som tillåtit den här frågan. Och det finns en patch för att aktivera detta beteende i 11g.)
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
Om det behövs kan du kringgå denna begränsning med fönsterfunktioner (som du kan använda i SQL Server
också:)
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