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
是非お試しください。