笛卡尔乘积
求助编辑百科名片
笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。
现在有两张表 t1 t2
表结构如下:
SQL> desc t1;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
SQL>
SQL> desc t2;
Name Null? Type
----------------------------------------- -------- ----------------------------
TEAMID NUMBER
然后要将t1 和t2 中的数据插入到 表t3中
t3的表结构如下
SQL> desc t3;
Name Null? Type
----------------------------------------- -------- ----------------------------
TEAMID NUMBER
ID NUMBER
表t1 t2中的数据如下
SQL> select * from t1;
ID
----------
1
2
3
SQL> select * from t2;
TEAMID
----------
1
2
3
插入数据的要求是, t2表中的 TEAMID 字段 对应多个t1表的 ID 字段,
插入后的数据格式如下:
SQL> select * from t3;
TEAMID ID
---------- ----------
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
9 rows selected.
使用笛卡尔积的方式可以得到想要的结果:select t2.teamid, t1.id from t1, t2 order by 1,2