【SQL】 PostgreSQL小技

◆指定したレコード数のレコードを抽出するSQL
(1)repeatで指定したレコード数-1件分のパイプ(|)文字列を作成する。
(2)string_to_arrayで文字列をパイプ(|)文字で分解して配列にセットする。
(3)unnestで配列をレコードに変換する。
(4)[おまけ] レコードを疑似的に一意にするために、行数(row_number)を項目にする。
(5)[おまけ] レコード数に1件を指定するとnullになってしまうので、(4)の1行目と同じ値をunionする。(union allでない)
SQLは以下のとおり。
select row_number() over() as no from unnest(string_to_array(repeat('|', 1000/*=レコード数*/ -1),'|')) as rows union select 1 as no order by no

追記。こんなことしなくても

select generate_series(1,1000)
とするだけで同じ結果が得られるのです。

どんな関数があるかちゃんと見ておきましょうね(^^;)

タイトルとURLをコピーしました