ホームページ > データベース > mysql チュートリアル > Microsoft SQL Server 2000 で MySQL の LIMIT 句を模倣するにはどうすればよいですか?

Microsoft SQL Server 2000 で MySQL の LIMIT 句を模倣するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-08 07:24:11
オリジナル
761 人が閲覧しました

How to Mimic MySQL's LIMIT Clause in Microsoft SQL Server 2000?

Microsoft SQL Server 2000 での MySQL の LIMIT 機能の複製

MySQL の LIMIT 句を使用すると、特定の数の行の取得が簡単になります。 SQL Server 2000 には直接同等の機能がないため、回避策が必要です。 同様の結果を達成するためのいくつかの方法を次に示します:

方法 1: 入れ子になったクエリ (SQL Server 2000)

このアプローチでは、ネストされた SELECT ステートメントを使用して、定義された範囲内の行をフィルター処理します。

SELECT TOP 25 *
FROM (
    SELECT TOP 75 *
    FROM table
    ORDER BY field ASC
) a
ORDER BY field DESC;
ログイン後にコピー

これは、field で順序付けした後、行 26 ~ 75 を取得します。 注: この方法は、大規模なデータセットでは効率が低く、最後のページではページ サイズの倍数ではないシナリオを適切に処理できません。

方法 2: 一意の列を利用する (SQL Server 2000)

テーブルに一意の列 (主キーなど) がある場合、この手法では既に選択されている行が除外されます。

SELECT TOP n *
FROM tablename
WHERE key NOT IN (
    SELECT TOP x key
    FROM tablename
    ORDER BY key
);
ログイン後にコピー

これにより、n 列の順序で、先頭の x 行を除く key 行が選択されます。 これは、大きなテーブルの場合も効率が低くなります。

方法 3: ROW_NUMBER() を使用する (SQL Server 2005 以降)

SQL Server 2005 以降の場合、ROW_NUMBER() 関数はより洗練されたソリューションを提供します。

SELECT z2.*
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY id) AS rownum, z1.*
    FROM ( ...original SQL query... ) z1
) z2
WHERE z2.rownum BETWEEN @offset + 1 AND @offset + @count;
ログイン後にコピー

これにより、各結果に行番号が割り当てられ、指定されたオフセット (@offset) とカウント (@count) に基づいてフィルター処理されます。 これは通常、新しい SQL Server バージョンでは最も効率的で柔軟な方法です。

方法 4: EXCEPT ステートメント (SQL Server 2005 以降)

SQL Server 2005 以降の別のオプションでは、EXCEPT セット演算子を使用します。

SELECT * FROM (
    SELECT TOP 75 COL1, COL2
    FROM MYTABLE ORDER BY COL3
) AS foo
EXCEPT
SELECT * FROM (
    SELECT TOP 50 COL1, COL2
    FROM MYTABLE ORDER BY COL3
) AS bar;
ログイン後にコピー

これにより、COL3 による順序付けの後、行 51 ~ 75 が選択されます。 ROW_NUMBER() アプローチと同様に、これは新しい SQL Server バージョンにとってより効率的なソリューションです。 ただし、複雑なシナリオでは ROW_NUMBER() ほど直感的ではありません。 SQL Server のバージョンとデータセットのサイズに最適な方法を選択してください。

以上がMicrosoft SQL Server 2000 で MySQL の LIMIT 句を模倣するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート