tateren’s diary

何か書きたくなった時に使う

PostgreSQLで無から複数行の任意のデータをSELECTする

テーブルも何も無い所から一行の固定値をSELECT(複数カラムもいける)

postgres=# SELECT 'ゆゆ式' AS title, '三上小又' AS Author;
 title  |  author  
--------+----------
 ゆゆ式 | 三上小又
(1 行)

これはよくやる(?)気がするんだけど、何も無いところから複数行SELECTするのってどうやるんだっけと思ってちょっと調べたら…

VALUES

VALUESを使えば良いのか。

postgres=# VALUES ('野々原'),('日向'),('櫟井'); --必要最小限の VALUES コマンド
 column1 
---------
 野々原
 日向
 櫟井
(3 行)

こんな感じでVALUESだけでテーブルが返ってくるんだけど敢えてSELECT文に組み込むならFROM句の中で使ってこうなる。

postgres=# SELECT * FROM (VALUES ('野々原'),('日向'),('櫟井')) AS yuyushiki(name);
  name  
--------
 野々原
 日向
 櫟井
(3 行)

VALUES を FROM 句の中で使用する場合には、 AS 句が必須となることに注意しましょう。

テーブルなので、結合もできる。

postgres=# SELECT * FROM (VALUES ('野々原'),('日向'),('櫟井')) AS family(family_name),
postgres-# (VALUES ('ゆずこ'),('縁'),('唯')) AS first (first_name);
 family_name | first_name 
-------------+------------
 野々原      | ゆずこ
 野々原      | 縁
 野々原      | 唯
 日向        | ゆずこ
 日向        | 縁
 日向        | 唯
 櫟井        | ゆずこ
 櫟井        | 縁
 櫟井        | 唯
(9 行)

なるほど…なるほど…