SQL: 2 つの値間の数値シーケンスの生成
SQL で指定された範囲内の連続する番号のリストを作成する必要がありますか? これは、VALUES
キーワードと JOIN
操作を組み合わせて使用することで簡単に実現できます。 1000 から 1050 までのシーケンスを生成する必要があるとします。各数値は新しい行に入力されます。
<code>1000 1001 1002 1003 ... 1050</code>
その方法は次のとおりです:
解決策:
この方法では、小さな数値テーブルの複数の JOIN
を利用して、より大きなシーケンスを作成します。
<code class="language-sql">WITH RECURSIVE x AS ( SELECT 0 AS n UNION ALL SELECT n + 1 FROM x WHERE n < 9999 -- Adjust upper limit as needed ) SELECT n FROM x WHERE n BETWEEN 1000 AND 1050 ORDER BY n;</code>
説明:
再帰 CTE (共通テーブル式): WITH RECURSIVE
ステートメントは、0 から上の数値を含む一時テーブル x
を作成します。 UNION ALL
は、最初の 0 と後続の数値を組み合わせ、条件 n < 9999
が満たされなくなるまで増加します。 9999
を調整して、生成される最大数を制御します。
範囲のフィルタリング: WHERE
句は、CTE からの結果をフィルタリングして、1000 ~ 1050 (両端の値を含む) の数値のみを含めます。
順序: ORDER BY n
により、数値が昇順で表示されます。
代替 (非再帰的): 範囲が狭い場合は、非再帰的アプローチの方が簡単な場合があります:
<code class="language-sql">WITH x AS ( SELECT 1000 AS num UNION ALL SELECT 1001 UNION ALL SELECT 1002 UNION ALL -- ... add more numbers as needed ... SELECT 1050 ) SELECT num FROM x;</code>
ただし、再帰的アプローチは、より広い範囲に対してはるかに拡張性が高くなります。
結論:
この SQL 手法は、定義された境界内で数値シーケンスを生成する柔軟かつ効率的な方法を提供します。 再帰的 CTE は、非常に大規模なシーケンスを生成するためのスケーラビリティを提供し、さまざまなデータ生成タスクのための強力なツールになります。目的の範囲に合わせて再帰 CTE (n < 9999
) の上限を忘れずに調整してください。
以上がSQL は、指定された 2 つの値の間の数値範囲をどのように生成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。