LoginSignup
5
2

More than 5 years have passed since last update.

CROSS JOINを使って連番を生成する

Posted at

1~10,000の連番をSQLだけで作る方法です。

クエリ

SQLServerでやるとこうなります。

CREATE TABLE #nums (
    num int
)
;

-- 元になる数値を用意
INSERT INTO #nums
VALUES
    (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)
;

-- 必要な桁数分 cross join する
SELECT
    digit1.num + digit2.num * 10 + digit3.num * 100 + digit4.num * 1000 + 1 AS result
FROM
    #nums digit1 CROSS JOIN #nums digit2 CROSS JOIN #nums digit3 CROSS JOIN #nums digit4
ORDER BY result
;

解説

CROSS JOINは行数x行数が最終的に結合された結果の行数になります。そのため今回は
10x10x10x10=10000件の0~9までの数字の組み合わせになります。

結合イメージ
スクリーンショット 2019-02-16 0.47.04.png

上記画像は9を起点にした矢印以外は省略していますが、このように全てのレコード同士が結びつきます。結果出来上がるレコードは下図のような形式です。
スクリーンショット 2019-02-16 0.53.34.png

このままではただの独立した4つの数字が存在してるだけであり、桁数ごとに適切に計算する必要があります。ここで

1桁目+2桁目x10+3桁目x100+4桁目x1000+1

という計算式を当てはめることで漏れなく連番が求まります。

5
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2