当前位置: 首页 > 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.lryc.cn/news/618394.html

相关文章:

  • 「机器学习」:金融风控贷款违约预测,天池比赛解决详细思路
  • 超详细!VMware12 安装win7操作系统
  • Gartner 《IAM for LLM-Based AI Agents》学习心得
  • 从GPT-2到gpt-oss:架构演进分析
  • Git 常用命令速查表
  • Kafka的一条消息的写入和读取过程原理介绍
  • excel-随笔记
  • 基于Hadoop的农产品价格数据分析与可视化【Springboot】
  • 关于数据库的restful api接口工具SqlRest的使用
  • Next.js 中间件:自定义请求处理
  • 自动驾驶 HIL 测试:构建 “以假乱真” 的实时数据注入系统
  • 【Go】Gin 超时中间件的坑:fatal error: concurrent map writes
  • [java八股文][Mysql面试篇]架构
  • 虚拟机一站式部署Claude Code 可视化UI界面
  • 从裸机到云原生:Linux 操作系统实战进阶的“四维跃迁”
  • C++11-下
  • 系统架构设计师备考之架构设计实践知识
  • Perl——文件操作
  • 导入文件到iPhone实现
  • 【网站深入seo方法】
  • Rocky Linux 10 部署 Kafka 集群
  • 工业相机镜头选型
  • 云计算核心技术
  • iPhone 17 Pro 为何被指像充电宝?
  • Stereolabs ZED相机 选型指南:双目 / 单目、短距 / 长距,如何为机器人视觉系统匹配最优方案?
  • 力扣11:盛水最多的容器
  • 深入C#异步编程基石:BeginInvoke与EndInvoke全解析
  • 使用ceph-deploy安装和配置RADOS Gateway (RGW)并使用S3访问集群
  • 串口超时参数深度解析:ReadTotalTimeoutMultiplier、ReadIntervalTimeout等
  • JVM宝典