こんにちは、上村です。

最近、苦戦したことを紹介します。

事象

「SQLを使用してデータを先頭から10件抽出したい」という場面がありました。

 

SELECT *
  FROM ライブラリ/ファイル        
  LIMIT 0, 10               

上記のコードを実行すると、バージョンによって異なる結果になりました。

 

  • V5R4:「トークン LIMIT は正しくない」 とエラーが表示される
  • V7R2:抽出結果が表示される

対処

以下のようにSQL文を変更後、抽出結果が表示されるようになりました。

 

  1. 元の抽出結果に行番号を連番で採番する
  2. 元の抽出結果に別名を付ける(←忘れるとエラーになります)
  3. 行番号で抽出条件を指定する
SELECT *                                                
  FROM (                                                
    SELECT ROWNUMBER() OVER(ORDER BY フィールド1) AS 行番号, フィールド1, フィールド2, フィールド3                              
    FROM ライブラリ/ファイル                                                               
    ORDER BY フィールド1                                     
  ) 別名                                               
  WHERE 行番号 BETWEEN 0 AND 10                        

先輩が過去に投稿しているこちらの記事に、LIMIT句が使えるようになった経緯と詳しい説明が書いておりますので、ぜひご覧ください。