Versi terbaru dari Oracle tidak memiliki batas tetapi sebagian besar versi Oracle yang lebih lama memiliki batas bersarang 1
tingkat yang dalam.
Ini berfungsi pada semua versi:
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
Kueri ini berfungsi di 12c dan 18c tetapi tidak berfungsi di 10g dan 11g. (Namun, setidaknya ada satu versi 10g yang mengizinkan kueri ini. Dan ada tambalan untuk mengaktifkan perilaku ini di 11g.)
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
Jika perlu, Anda dapat mengatasi batasan ini dengan fungsi jendela (yang dapat Anda gunakan di SQL Server
juga :)
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