Najnowsze wersje Oracle nie mają limitu, ale większość starszych wersji Oracle ma limit zagnieżdżenia 1
poziom głęboko.
Działa to we wszystkich wersjach:
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
To zapytanie działa w 12c i 18c, ale nie działa w 10g i 11g. (Jednak istnieje co najmniej jedna wersja 10g, która zezwala na to zapytanie. Jest też poprawka, która umożliwia to zachowanie w 11g.)
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
W razie potrzeby możesz obejść to ograniczenie za pomocą funkcji okna (których możesz używać w SQL Server
też:)
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