記事
Megumi Kakechi · 2022年11月28日 2m read

IRIS SQLでは OFFSET/LIMIT句のような機能をサポートしてますか?

Question:

IRISでは、PostgreSQLやMySQLで使うことができる、開始位置や取得件数を指定する OFFSET句やLIMIT句をサポートしているでしょうか?


Answer:

残念ながらサポートしていません。
ただ、代わりに使える同様の方法がありますのでご紹介します。

以下のようなSQLクエリをIRIS SQLで行うとします。

SELECT *
  FROM Sample.Person
ORDER BY Name
 LIMIT 3 OFFSET 5


---------------------------------------------------------------------------------
1. サブクエリとビュー ID (%VID)を使用する方法
---------------------------------------------------------------------------------

IRISでは、ビューまたは FROM 節のサブクエリで返される各行に整数のビュー ID (%VID) を割り当てることができます。
%VIDを使用すると、以下のサンプルのようにして同様のことが実現できます。
※%vidについて

SELECT *, %vid FROM (SELECT top all ID, Name
                     FROM Sample.Person
                     ORDER BY Name) v
WHERE %vid BETWEEN 6 AND 8
// 6番目から3つ分 --> 8番目まで


---------------------------------------------------------------------------------
2. OFFSET目までのデータを除いて TOP する方法
---------------------------------------------------------------------------------

SELECT TOP 3 ID, Name FROM Sample.Person WHERE ID NOT IN (SELECT TOP 5 ID
                 FROM Sample.Person
                 ORDER BY Name)
ORDER BY Name

 

---------------------------------------------------------------------------------
3.row_number() 関数を使用する方法
---------------------------------------------------------------------------------

IRIS 2021.1以降でサポートされるようになった ウィンドウ関数の ROW_NUMBER() を使用して実現することも可能です。

SELECT * FROM (
  SELECT row_number() OVER (ORDER BY Name) AS rn, ID, Name
  FROM Sample.Person 
) AS e 
WHERE e.rn BETWEEN 6 AND 8 ORDER BY Name


是非お試しください。

0
0 39
ディスカッション (0)0
続けるにはログインするか新規登録を行ってください