SQL Server中依据关联规则生成Color与Size列的所有有效组合查询方法
SQL Server 颜色尺码有效组合查询实现方案
核心思路
- 先生成
Color表和Size表的全量笛卡尔积,覆盖所有可能的颜色+尺码组合 - 将全量组合与
LinkedColorSize规则表做条件匹配,匹配逻辑满足两个条件即可命中:- 规则的
Color字段值为'0',或规则的Color值与当前组合的颜色名称完全相等 - 规则的
Size字段值为'0',或规则的Size值与当前组合的尺码名称完全相等
- 规则的
- 对命中的组合做去重处理,避免多条规则命中同一组合导致重复输出
完整实现代码
SELECT DISTINCT c.ColorName, s.SizeName, -- 可按需保留拼接后的组合值 CONCAT(c.ColorName, '-', s.SizeName) AS CombinedResult FROM Color c -- 生成所有颜色+尺码的全组合 CROSS JOIN Size s -- 关联规则表做匹配 INNER JOIN LinkedColorSize lcs ON (lcs.Color = '0' OR lcs.Color = c.ColorName) AND (lcs.Size = '0' OR lcs.Size = s.SizeName) ORDER BY CombinedResult
提示:如果你的
LinkedColorSize表中Color、Size字段为数值类型,仅需将匹配条件里的'0'去掉单引号改为0即可。
场景兼容验证
以示例场景验证:
示例
LinkedColorSize数据:
- LinkID=1:Color=Red、Size=Large
- LinkID=2:Color=Green、Size=0
执行上述SQL后输出结果为:Red-Large、Green-Small、Green-Large,和预期完全一致。
同时支持所有规则组合场景:
- 规则Color=0且Size=0:返回所有颜色+尺码的全组合
- 规则仅Color=0:返回所有颜色匹配指定Size的组合
- 规则仅Size=0:返回指定Color匹配所有尺码的组合
内容的提问来源于stack exchange,提问作者Durgesh Padha
相关产品推荐
相关产品推荐

