2

クエリによって返される行数を制限するために、Oracle と MySql と互換性のあるソリューションはありますか?

たとえば、mysql には LIMT 句があります。

SELECT * FROM myTable LIMT 10;

Oracle では、rownum 列で条件を使用します。

MySQL と Oracle の両方で機能するコードが必要です

4

4 に答える 4

1

テーブルに一意の id 列 (または列の組み合わせ) がある場合は、次の操作を実行できます。

select t.*
from t
where (select count(*) from t t2 where t2.id <= t.id) <= 10;

句の相関サブクエリwhereは標準の SQL 構文であるため、任意のデータベースで実行する必要があります。

小さなテーブルでは、パフォーマンスは問題ないはずです。にインデックスを付けると改善されt(id)ます。

于 2013-05-30T18:09:36.260 に答える
0

完全な自動インクリメント (数字がスキップされない) フィールドがあり、他の条件がないと仮定します。

最後の 5 つのレコードを取得するには

SELECT * FROM account
HAVING (SELECT MAX(id) FROM account) - 5 < id  

最初の 5 つのレコードを取得するには

SELECT * FROM account
HAVING (SELECT MIN(id) FROM account) + 5 > id
于 2013-05-30T17:25:13.253 に答える
0

特にこのソリューションが実行される場合、データベース抽象化レイヤーのないソリューションについては知りません。

この特定の問題の解決策を見つけたとしても、データベースの移植性までの道のりにはさらに 99 の問題があります。ここで同様の質問への回答に私の経験を投稿しました

この特定の問題に対する朗報は、DB2、PostgreSql、Oracle、および MySql の場合、単純にクエリをラップ/拡張して、制限付きのクエリにすることができることです。ただし、アプリケーションのどこかでこれを処理する必要があります。

于 2013-05-30T18:30:07.843 に答える