様々な基本になるサンプルを記録しています。

不定期更新です。

記事のサイドに使用している商品の紹介も掲載しているので、良ければご覧ください。

【組み合わせ】【SQL】内部結合によるデカルト積

テストケースを考えるときに組み合わせを頭ですべて考えるのは、過剰になりすぎたり、過不足になったりと、本当に正式なパターンが洗い出されているのか不安ではないかと思う。
そういうときにデカルト積により、テストパターンの組み合わせを網羅できれば、憂鬱にならない。

以下のような、こんなテーブルデータを用意してやってみる。
とりあえず、テーブル名を「test」としてみる。
(以下、貼り付けているイメージはMicrosoft Accessでキャプチャを取っている。)

サンプルテーブルデータ

このデータの4つ並べた時の組み合わせをSQLで作ってみる。

--一つのテーブルを4つ定義し、それぞれフィールド指定
SELECT 
 A.F1 AS F1,
 B.F1 AS F2,
 C.F1 AS F3,
 D.F1 AS F4

FROM 
 test AS A,
 test AS B,
 test AS C,
 test AS D

--4つ並べる
WHERE 
         A.F1<B.F1
  And B.F1<C.F1
  And C.F1<D.F1

この結果が以下のようになる。
5通りのパターンが出る。

ちなみに2つ並べるとしたら、テーブル定義数とフィールド指定、WHERE条件を減らすとできる。

--一つのテーブルを2つ定義し、それぞれフィールド指定
SELECT 
 A.F1 AS F1,
 B.F1 AS F2,

FROM 
 test AS A,
 test AS B,

--2つ並べる
WHERE 
         A.F1<B.F1

結果は10通り。

4つ選択時と2つ選択時の違いから、選択数を増やすと共に、WHERE条件を指定したフィールド文、不等号で繋げていくイメージ。
言葉での説明が難しいので、SQLの例を見て判断してもらいたいと思う。

ちなみに同じ組み合わせでも、違う順番で選ばれるパターンの組み合わせを出すやり方もあるが、不等号の部分を変更するだけになる。

--一つのテーブルを4つ定義し、それぞれフィールド指定
SELECT 
 A.F1 AS F1,
 B.F1 AS F2,
 C.F1 AS F3,
 D.F1 AS F4

FROM 
 test AS A,
 test AS B,
 test AS C,
 test AS D

--4つ並べる 組み合わせ重複および選択順が異なる
WHERE 
         A.F1<=B.F1
  And B.F1<=C.F1
  And C.F1<=D.F1

70通り出てくるが、さすがにイメージでは長すぎて載せられない。。。



これらは、掃除当番とか、グループ分けとかの表作成を行うときに、便利かもしれない。