MYSQL:
SELECT * FROM book ORDER BY $sidx $sord LIMIT $start , $limit;
これをOracleに変換するにはどうすればよいですか?
プロパティを使用する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;
select * from(
select rownum as row_num, id from t
)
where row_num between :start and :start+:limit
私はオラクルの構文に精通していませんが、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)
/*
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