Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Có giới hạn lồng cho các truy vấn con tương quan trong một số phiên bản của Oracle không?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Chọn từ kiểu dữ liệu bản ghi

  2. Làm cách nào để xóa các bản sao khỏi danh sách được phân tách bằng dấu phẩy bằng regexp_replace trong Oracle?

  3. Làm cách nào để chọn các cột từ bảng có giá trị không rỗng?

  4. Làm thế nào để ghi lại một cơ sở dữ liệu

  5. Thử thách kiểm tra cơ sở dữ liệu Oracle - So sánh dữ liệu lược đồ