子育てエンジニアブログ

子育てに励むシステムエンジニア(SE)のブログ

【SQL】SQLを使ってデータパターンの一覧を作ってみる

SQLを使ってデータパターンの一覧を作ってみたのでメモ。
今回は対象はSQL Serverです。

方法としては直積(CROSS JOIN)で作成します。

まずは、テーブル作成

CREATE TABLE Table1
    ([id] int, [ddata] varchar(1))
;

CREATE TABLE Table2
    ([id2] int, [ddata2] varchar(2))
;

テーブルにインサート

INSERT INTO Table1
    ([id], [ddata])
VALUES
    (1, 'A'),
    (2, 'B'),
    (3, 'C')
;

INSERT INTO Table2
    ([id2], [ddata2])
VALUES
    (11, 'AA'),
    (22, 'BB'),
    (33, 'CC')
;

Selectでそれぞれのテーブルを確認

select * from Table1

f:id:STSA:20201011232617p:plain

select * from Table2

f:id:STSA:20201011232655p:plain

それではここから、データパターンの一覧を抽出してみる。

select * from Table1 cross join Table2
order by id,ddata,id2,ddata2

f:id:STSA:20201011232736p:plain

これだとTable1の行の数×Table2の行の数になる。
今回は列ごとに組み合わせを作りたいのでさらにネストさせる。

select * from (
select * from (select id from Table1 )AAA 
  cross join (select  ddata from  Table1) BBB
  )AAABBB
   cross join  
   (
select * from (select id2 from Table2 )CCC 
  cross join (select  ddata2 from  Table2) DDD
  )CCCDDD
  order by id,ddata,id2,ddata2

f:id:STSA:20201011232939p:plain

うむ。できた。
列の数が増えるほどネストさせないといけないのがネック。