1. ホーム
  2. sql

[解決済み] SQL ServerにおけるLIMIT 10...20

2022-03-02 02:32:17

質問

私は、次のようなことをしようとしています。

SELECT * FROM table LIMIT 10,20

または

SELECT * FROM table LIMIT 10 OFFSET 10

が、SQL Server を使って

唯一の 私が見つけた解決策 はやりすぎのような気がします。

SELECT * FROM ( 
  SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases 
 ) a WHERE row > 5 and row <= 10

また 発見 :

SELECT TOP 10 * FROM stuff; 

...が、開始時の制限を指定できないので、やりたいこととは違う。

他に方法はありますか?

また、ちょっと気になったのですが、SQL Server はなぜ LIMIT 関数かそれに類するものを教えてください。意地悪を言うつもりはないのですが、それは本当にDBMSに必要なもののように思えるのですが.もしそうだとしたら、無知でごめんなさい 私は過去5年間、MySQLとSQL+で作業してきましたので...

どのように解決するのですか?

その LIMIT 節は標準SQLの一部ではありません。 MySQL、PostgreSQL、SQLite では、SQL のベンダ拡張としてサポートされています。

他のブランドのデータベースでも、同様の機能(例えば TOP の場合)、これらは常に同じように動作するわけではありません。

を使うのは難しい。 TOP を模倣するために Microsoft SQL Server で LIMIT 節があります。 どうしてもうまくいかないケースがあります。

あなたが示した解決策では ROW_NUMBER() は、Microsoft SQL Server 2005 以降で利用可能です。 これは、クエリの一部としてのみ動作する(現時点での)最良の解決策です。

もう一つの解決策は TOP を取得するために、最初の カウント + オフセット の行をシークし、API を使って最初の オフセット 行になります。

こちらもご覧ください。