当前位置: 首页 > news >正文

SQL 生成日期与产品的所有组合:CROSS JOIN(笛卡尔积)

CROSS JOIN​​(笛卡尔积)是一种 SQL 连接方式,它会将 ​​第一个表的每一行​​ 与 ​​第二个表的每一行​​ 进行组合,生成所有可能的配对。

  • 如果表 A 有 m行,表 B 有 n行,那么 A CROSS JOIN B的结果会有 m × n行。

  • ​不依赖任何连接条件​​(没有 ON或 WHERE子句),直接组合所有数据。

-- 显式 CROSS JOIN
SELECT * FROM table1 CROSS JOIN table2;-- 隐式 CROSS JOIN(用逗号分隔表)
SELECT * FROM table1, table2;

虽然笛卡尔积通常会导致数据量爆炸(慎用!),但在特定场景下很有价值:

  1. ​生成所有可能的组合。

  2. 计算排列组合或矩阵。例如:统计不同性别和年龄段的用户分布。

  3. ​测试数据生成​​。快速创建大量测试数据(如压力测试)。


​场景​​: 生成日期与产品的所有组合

-- 生成日期序列的递归CTE(MySQL 8.0+)
WITH RECURSIVE date_range AS (SELECT '2023-01-01' AS dateUNION ALLSELECT DATE_ADD(date, INTERVAL 1 DAY) FROM date_range WHERE date < '2023-01-05'
)
SELECT d.date,p.product_id,p.product_name
FROM date_range d
CROSS JOIN products p
ORDER BY d.date, p.product_id;

​思路​​:

  • 用递归CTE date_range 生成连续日期序列。
  • 通过 CROSS JOIN 将每个日期与产品表中的所有记录组合。

​建表示例​​:

CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(100) NOT NULL
);INSERT INTO products (product_id, product_name) VALUES
(1, 'Laptop'),
(2, 'Smartphone'),
(3, 'Headphones');

http://www.xdnf.cn/news/1289953.html

相关文章:

  • JVM宝典
  • 每日五个pyecharts可视化图表-line:从入门到精通 (4)
  • 什么时候用WS(WebSocket),什么使用用SSE(Server-Sent Events)?
  • Pytest项目_day13(usefixture方法、params、ids)
  • 机器学习处理文本数据
  • linux 开机进入initramfs无法开机
  • 串口通信学习
  • 数据分析专栏记录之 -基础数学与统计知识
  • Spring-Cache 缓存数据
  • windows git安装步骤
  • XGBoost 的适用场景以及与 CNN、LSTM 的区别
  • 网络协议——HTTP协议
  • Linux服务:Apache 虚拟主机配置指南:多站点部署三种方式详解
  • 【超详细!题解|两种做法】洛谷P3196 [HNOI2008] 神奇的国度[MCS算法]
  • 深入剖析 React 合成事件:透过 onClick 看本质
  • 过程设计工具深度解析-软件工程之详细设计(补充篇)
  • Nginx 高级配置
  • 【后端】Spring @Resource和@Autowired的用法和区别
  • 通用同步/异步收发器USART串口
  • excel-随笔记
  • [ 数据结构 ] 时间和空间复杂度
  • Python初学者笔记第二十二期 -- (JSON数据解析)
  • VGG改进(2):基于Local Attention的模型优化
  • 【图像算法 - 13】基于 YOLO12 与 OpenCV 的实时目标点击跟踪系统(系统介绍 + 源码详细)
  • 获取数组,字符串,集合的长度
  • C++——高性能组件
  • 算法打卡力扣第88题:合并两个有序数组(easy)
  • 解释 Spring MVC 的工作原理
  • _init__.py的作用
  • 智能装配线cad【8张】三维图+设计说明书