You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中Cross Join的实用场景困惑及具体示例需求

SQL Cross Join 实际应用场景示例

场景1:电商商品SKU规格组合生成

很多电商商品会有多个属性(比如颜色、尺寸),需要生成所有属性组合的SKU(库存保有单位),这时候Cross Join就是最直接的解决方案。

假设我们有两个表:

  • product_colors:存储商品可选颜色
  • product_sizes:存储商品可选尺寸

先创建并插入测试数据:

-- 创建颜色表
CREATE TABLE product_colors (
    color_id INT PRIMARY KEY,
    color_name VARCHAR(20)
);

INSERT INTO product_colors VALUES
(1, '黑色'),
(2, '白色'),
(3, '藏青色');

-- 创建尺寸表
CREATE TABLE product_sizes (
    size_id INT PRIMARY KEY,
    size_name VARCHAR(10)
);

INSERT INTO product_sizes VALUES
(1, 'S'),
(2, 'M'),
(3, 'L'),
(4, 'XL');

现在要生成所有颜色和尺寸的组合,用来创建SKU,用Cross Join实现:

SELECT 
    c.color_name,
    s.size_name,
    CONCAT(c.color_name, '-', s.size_name) AS sku_code
FROM product_colors c
CROSS JOIN product_sizes s;

执行后会得到12条结果(3种颜色 × 4种尺寸),示例结果:

color_namesize_namesku_code
黑色S黑色-S
黑色M黑色-M
黑色L黑色-L
黑色XL黑色-XL
白色S白色-S
.........

这个场景里,我们不需要两个表之间的关联条件,只需要所有属性的笛卡尔积,Cross Join完美匹配需求。


场景2:门店排班基础表生成

假设公司有5家门店,需要为每家门店生成未来7天的排班记录框架,后续再填充值班人员。这时候可以用日期表和门店表做Cross Join。

先创建测试表:

-- 创建门店表
CREATE TABLE stores (
    store_id INT PRIMARY KEY,
    store_name VARCHAR(50)
);

INSERT INTO stores VALUES
(1, '北京朝阳店'),
(2, '上海浦东店'),
(3, '广州天河店'),
(4, '深圳南山店'),
(5, '杭州西湖店');

-- 生成未来7天的日期表(这里用CTE临时生成,实际也可以用日历表)
WITH date_range AS (
    SELECT DATE_ADD(CURDATE(), INTERVAL n DAY) AS shift_date
    FROM (
        SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 
        UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
    ) AS nums
)

用Cross Join生成所有门店-日期的组合:

SELECT 
    s.store_id,
    s.store_name,
    d.shift_date,
    '待安排' AS duty_staff
FROM stores s
CROSS JOIN date_range d
ORDER BY s.store_id, d.shift_date;

执行后会得到35条结果(5家门店 × 7天),每条记录对应一个门店的某天排班框架,后续可以直接更新duty_staff字段添加值班人员。

内容的提问来源于stack exchange,提问作者nants

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:27:11