-4

MYSQL:

SELECT * FROM book ORDER BY $sidx $sord LIMIT $start , $limit;

これをOracleに変換するにはどうすればよいですか?

4

4 に答える 4

3

プロパティを使用するrownum必要がありますが、既に並べ替えられた結果セットに適用する必要があり、内部クエリから渡す必要があります (Bob Jarvis と Daniel Hilgarth の功績: コメントに記載されている説明とリンクも確認してください)。次のようになります。

SELECT * FROM
(SELECT b.*, rownum as row_num FROM book b ORDER by $sidx $sord)
WHERE row_num BETWEEN $start AND $start + $limit;
于 2012-09-18T10:52:32.840 に答える
1
select * from(
select rownum as row_num, id from t
  )
where row_num between :start and :start+:limit
于 2012-09-18T10:57:03.397 に答える
1

私はオラクルの構文に精通していませんが、ROW_NUMBER()関数を使用して行をランク付けし、次のものを選択できますrank BETWEEN @start and @limit

   SELECT *
   FROM 
   (
       select *,
           ROW_NUMBER() OVER (ORDER BY ID DESC) AS rank
       FROM book
   )
   WHERE rank BETWEEN @start AND @end
   /* OR
   WHERE BETWEEN ((@PageNum - 1) * @PageSize + 1)
     AND (@PageNum * @PageSize)
   /*
于 2012-09-18T10:53:07.313 に答える
0

10g以降

WITH CTE AS(SELECT  b.*, Row_Number() OVER(ORDER BY SIDX,SORD) AS Rn FROM BOOK b)
SELECT *
FROM CTE
WHERE Rn BETWEEN STARTLIMIT AND ENDLIMIT
于 2012-09-18T10:53:02.887 に答える