oracle的ROWNUM
LIMIT
pseududocolumn,在與訂購結合使用時會提出一個獨特的挑戰。與MySQL的ROWNUM
子句不同,子句在排序之後適用,過濾> ORDER BY
ROWNUM
>
不能保證您的結果的特定有序子集。 >
標準方法(所有Oracle版本):>
LIMIT
要取得相當於mySQL的
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
ROWNUM
此方法首先訂購數據,然後應用
偏移與限制結果:
>
對於更複雜的控制,指定偏移和限制需要一個更複雜的查詢:<code class="language-sql">SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM ( SELECT * -- Your main query with ORDER BY clause FROM some_table ORDER BY some_column ) a WHERE ROWNUM <= :MAX_ROW_TO_FETCH ) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
:MAX_ROW_TO_FETCH
>用所需的上限和下限替換:MIN_ROW_TO_FETCH
>
FETCH
Oracle 12c及以後:
FETCH
>
<code class="language-sql">-- Retrieve the first 10 rows SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- Retrieve rows 20-30 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>Oracle 12c(及以後的版本)使用
子句提供了更優雅的解決方案:FETCH
以上是如何有效地限制和抵消查詢會導致Oracle?的詳細內容。更多資訊請關注PHP中文網其他相關文章!