根据笛卡尔积的定义,JOIN的两表中的任意一行都会形成一组关系对,如果A表有N条记录,B表有M条记录,A X B 会生产N*M条数据。
1. 可以通过" CROSS JOIN " 来实现笛卡尔积select * from A cross join b。
2. 如果不支持CROSS JOIN的情况下,可以采用 "select * from A join B on 1 = 1" 的方式实现。
3. 第二种方法可能在语法检测阶段就报错不支持,可以转成如下语法

select * from 
(select * , '1' as flag from A)
t1 on
(select *, '1' as flag from B)
t2 where t1.flag = t2.flag


笛卡尔积会产生大量的数据,对内存、计算资源都会产生巨大压力,慎用!但是这种用法在应对需要统计不同窗口长度的指标时(如从订单表中计算7天、30天、90天内不同商户25%分位的订单金额或不重复的客户数量--具体使用会在SQL实践文章中详细说明)有很大帮助,可以减少重复代码量,也能避免重复读表。

下次聊聊在从A表中过筛选出或者排除掉 包含在名单表B中 的客户数据

(觉得写得不错就点个赞吧, 头条号: 风控数据开发-唔崎 欢迎关注)

更多推荐