3 つのテーブルがA
B
ありC
ます。のすべてのエントリA x B
(x はデカルト積または交差結合) に対して、 にエントリがありC
ます。
つまり、 に 2 つのエントリと に 3つのエントリがある場合、 のテーブルはC
次のようになります。A
B
| A_ID | B_ID | C_Val |
----------------------|
| 1 | 1 | 100 |
| 1 | 2 | 56 |
| 1 | 3 | 19 |
| 2 | 1 | 67 |
| 2 | 2 | 0 |
| 2 | 3 | 99 |
したがって、 と の任意の組み合わせについてA
、B
で検索する値がありますC
。これがすべて理にかなっていることを願っています。
実際にはA x B
、データベースのサイズは比較的小さいかもしれませんが、データをテストするために手動で入力するには大きすぎます。したがって、およびC
に既に存在する可能性のあるデータについて、 のテーブルにランダムにデータを入力したいと思います。A
B
SQL に関する私の知識はかなり基本的なものです。これまでにできると判断したことは、そのデカルト積を次のように内部クエリとして取得することです。
(SELECT B.B_ID, C.C_ID
FROM B CROSS JOIN C)
次に、次のようなことを言いたいと思います。
INSERT INTO A(B_ID, C_ID, A_Val) VALUES
(SELECT B.B_ID, C.C_ID, FLOOR(RAND() * 100)
FROM B CROSS JOIN C)
当然のことながら、これは機能しません。その場で列を生成したり、テーブル全体を値として挿入しようとしたりする有効な構文はないと思います。
基本的に、この通常のプログラミング擬似コードを適切な SQL に変換するにはどうすればよいですか?
foreach(A_ID in A){
foreach(B_ID in B){
C.insert(A_ID, B_ID, Rand(100));
}
}