14

数字のリストを含む「何もない」関係を選択するための高速で読みやすい方法は何ですか。開始値と終了値を設定して、どの番号を定義したいのですか。私は Postgres SQL と SQLite を使用しており、両方/多くのプラットフォームで動作する一般的なソリューションに興味があります。

希望する出力関係:

# x
  0
  1
  2
  3
  4

「何もない」から単一の行を選択できることはわかっています:SELECT 0,1,2,3,4しかし、これは値を行ではなく列として選択し、開始値と終了値のみを使用するのではなく、クエリですべての値を指定する必要があります:04.

Postgres には、generate_seriesこの場合のための特別な機能があります。

SELECT * FROM generate_series(0,4) x;

これはうまく機能しますが、非標準です。一時テーブルを使用した複雑なソリューションも想像できますが、次のような一般的で単純なものが必要です。

SELECT * FROM [0..4]

たぶん、SEQUENCEステートメントまたはとの魔法の組み合わせをSELECT 0使用していSELECT 4ますか?

4

6 に答える 6

8

SQL サーバー (および PostgreSQL) では、再帰的な共通テーブル式を使用します: SQL ServerPostgreSQL

with recursive Numbers as (
    select 0 as Number
    union all
    select Number + 1
    from Numbers
    where Number < 4
)
select Number
from Numbers

SQL フィドルの例

しかし、私の知る限り、SQLite には WITH はありません。

したがって、可能な解決策は

  • ユーザー定義関数を作成します (これは役に立ちます)
  • 0 から必要な最大数までの数字でテーブルを作成し、次のように選択します。

    select Number from Numbers where Number >= 0 and Number <= 4
    
于 2013-07-16T10:16:08.400 に答える
5

PostgreSQL と SQLite でこれを行う簡単な方法は次のとおりです。

sqlite> select 1 union select 2 union select 3;
1
2
3

ほとんどの RDBMS システムで動作するはずですが、Oracle では IIRC を使用する必要があります。

select 1 from dual union select 2 from dual union select 3 from dual;

しかし、それをテストするための Oracle DB がありません。

于 2013-08-02T00:52:45.537 に答える