如何在无PK/FK关联的两张表间实现一对多连接?
实现两张无关联表的全量组合(笛卡尔积)
嘿,你这个需求其实就是要生成两张表的笛卡尔积(Cartesian Product)——也就是让表1里的每一条记录,都和表2里的所有记录进行匹配组合,这在SQL里是个很基础的操作,两种写法都能实现:
方法1:隐式交叉连接(用逗号分隔表)
这种写法比较简洁,直接在FROM子句里列出两个表即可,数据库会自动处理成全量组合:
SELECT table1.A, table2.B FROM table1, table2;
方法2:显式交叉连接(CROSS JOIN)
这种写法更清晰直观,明确告诉数据库要做全量匹配,可读性更好,推荐使用:
SELECT t1.A, t2.B FROM table1 t1 CROSS JOIN table2 t2;
结果示例
按照你给出的表数据:
- table1的A列值:
A、B、C - table2的B列值:
1、2、3
执行上述SQL后,会得到9条结果,正好是你期望的组合:
A | 1
A | 2
A | 3
B | 1
B | 2
B | 3
C | 1
C | 2
C | 3
注意事项
如果两张表的数据量都很大,笛卡尔积会生成行数=表1行数×表2行数的结果集,可能会占用大量资源,所以执行前最好确认表的规模是否适合做这种查询哦~
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

