Nejnovější verze Oracle nemají limit, ale většina starších verzí Oracle má limit vnoření 1
úroveň hluboko.
Toto funguje na všech verzích:
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
Tento dotaz funguje v 12c a 18c, ale nefunguje v 10g a 11g. (Nicméně existuje alespoň jedna verze 10g, která tento dotaz umožňovala. A existuje záplata, která toto chování umožňuje v 11g.)
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
V případě potřeby můžete toto omezení obejít pomocí okenních funkcí (které můžete použít v SQL Server
taky :)
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