クエリによって返される行数を制限するために、Oracle と MySql と互換性のあるソリューションはありますか?
たとえば、mysql には LIMT 句があります。
SELECT * FROM myTable LIMT 10;
Oracle では、rownum 列で条件を使用します。
MySQL と Oracle の両方で機能するコードが必要です
クエリによって返される行数を制限するために、Oracle と MySql と互換性のあるソリューションはありますか?
たとえば、mysql には LIMT 句があります。
SELECT * FROM myTable LIMT 10;
Oracle では、rownum 列で条件を使用します。
MySQL と Oracle の両方で機能するコードが必要です
テーブルに一意の id 列 (または列の組み合わせ) がある場合は、次の操作を実行できます。
select t.*
from t
where (select count(*) from t t2 where t2.id <= t.id) <= 10;
句の相関サブクエリwhere
は標準の SQL 構文であるため、任意のデータベースで実行する必要があります。
小さなテーブルでは、パフォーマンスは問題ないはずです。にインデックスを付けると改善されt(id)
ます。
完全な自動インクリメント (数字がスキップされない) フィールドがあり、他の条件がないと仮定します。
最後の 5 つのレコードを取得するには
SELECT * FROM account
HAVING (SELECT MAX(id) FROM account) - 5 < id
最初の 5 つのレコードを取得するには
SELECT * FROM account
HAVING (SELECT MIN(id) FROM account) + 5 > id
特にこのソリューションが実行される場合、データベース抽象化レイヤーのないソリューションについては知りません。
この特定の問題の解決策を見つけたとしても、データベースの移植性までの道のりにはさらに 99 の問題があります。ここで同様の質問への回答に私の経験を投稿しました
この特定の問題に対する朗報は、DB2、PostgreSql、Oracle、および MySql の場合、単純にクエリをラップ/拡張して、制限付きのクエリにすることができることです。ただし、アプリケーションのどこかでこれを処理する必要があります。