sql >> データベース >  >> RDS >> Mysql

SQLSERVERと同等のMySQLLIMIT句

    SQL Server 2012では、ANSI標準のOFFSETがサポートされています。 / FETCH 構文。私はブログを書いていますこれ こちらが公式ドキュメント> (これはORDER BYの拡張機能です )。 SQLServer2012用に変換された構文は次のようになります。

    SELECT ID, Name, Price, Image 
      FROM Products 
      ORDER BY ID ASC 
      OFFSET (@start_from - 1) ROWS -- not sure if you need -1
        -- because I don't know how you calculated @start_from
      FETCH NEXT @items_on_page ROWS ONLY;
    

    その前に、ROW_NUMBER()を含むさまざまな回避策を使用する必要があります 方法。 この記事 を参照してください およびフォローオンディスカッション 。 SQL Server 2012を使用していない場合、標準の構文またはMySQLの非標準のLIMITを使用することはできません。 ただし、次のようなより詳細なソリューションを使用できます。

    ;WITH o AS
    (
        SELECT TOP ((@start_from - 1) + @items_on_page)
             -- again, not sure if you need -1 because I 
             -- don't know how you calculated @start_from
          RowNum = ROW_NUMBER() OVER (ORDER BY ID ASC)
          /* , other columns */
        FROM Products
    )
    SELECT 
        RowNum
        /* , other columns */
    FROM
        o
    WHERE
        RowNum >= @start_from
    ORDER BY
        RowNum;
    

    この猫の皮を剥ぐ方法は他にもたくさんあります。これが最も効率的である可能性は低いですが、構文的にはおそらく最も簡単です。投稿したリンクと、質問へのコメントに記載されている重複した提案を確認することをお勧めします。



    1. データベースホスティングコストの削減:DigitalOcean vs. AWS vs. Azure

    2. オプションのWHEREパラメータを使用したスト​​アドプロシージャ

    3. C#から出力パラメータとして参照カーソルを使用してOracle関数を呼び出す方法は?

    4. 'GO'の近くの構文が正しくありません