Các phiên bản gần đây của Oracle không có giới hạn nhưng hầu hết các phiên bản cũ của Oracle đều có giới hạn lồng nhau là 1
độ sâu.
Điều này hoạt động trên tất cả các phiên bản:
SELECT (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
FROM dual do
Truy vấn này hoạt động ở 12c và 18c nhưng không hoạt động ở 10g và 11g. (Tuy nhiên, có ít nhất một phiên bản 10g cho phép truy vấn này. Và có một bản vá để kích hoạt hành vi này trong 11g.)
SELECT (
SELECT *
FROM (
SELECT *
FROM dual dn
WHERE dn.dummy = do.dummy
)
WHERE rownum = 1
)
FROM dual do
Nếu cần, bạn có thể giải quyết hạn chế này bằng các hàm cửa sổ (bạn có thể sử dụng hàm này trong SQL Server
quá :)
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