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

在SQL Server中生成两个集合的全组合交叉表方法

生成两个集合的全组合(笛卡尔积)

要得到两个相同集合的所有非NULL全组合,你需要用**笛卡尔积(Cross Join)**来生成,而不是分别插入单个字段的值。以下是两种可行的方法:

方法一:基于基础表生成

先创建一个存储基础集合的表,再通过自连接的Cross Join生成所有组合:

-- 创建存储基础值的表
CREATE TABLE base_values (val varchar(254));
INSERT INTO base_values (val) VALUES ('1'), ('2'), ('3');

-- 创建目标表并插入全组合
CREATE TABLE table1 (Var1 varchar(254), Var2 varchar(254));
INSERT INTO table1 (Var1, Var2)
SELECT b1.val, b2.val
FROM base_values b1
CROSS JOIN base_values b2;

方法二:直接用临时数据集生成

如果不需要保留基础表,可以直接用VALUES子句生成临时数据集,再做Cross Join:

-- 创建目标表并插入全组合
CREATE TABLE table1 (Var1 varchar(254), Var2 varchar(254));
INSERT INTO table1 (Var1, Var2)
SELECT v1.val, v2.val
FROM (VALUES ('1'), ('2'), ('3')) AS v1(val)
CROSS JOIN (VALUES ('1'), ('2'), ('3')) AS v2(val);

为什么你之前的方法得不到预期结果?

你之前的INSERT语句是分别给Var1和Var2单独赋值,每次插入只会填充一个字段,另一个字段默认是NULL,所以最终得到6行带NULL的记录,而非两个集合的全组合。Cross Join会将第一个集合的每一条记录与第二个集合的每一条记录配对,正好生成你需要的9行非NULL全组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:21:28