SQL实现全量员工-产品组合的费率查询,无匹配值默认返回0.00
实现方案
核心思路很直接:先算出所有员工和所有产品的全量配对,再左接费率表匹配已存的费率值,没有匹配的就兜底填0.00。
具体SQL语句
SELECT a.empId AS empID, b.prodName, COALESCE(c.rate, 0.00) AS rate FROM a -- 交叉连接生成全量员工-产品组合 CROSS JOIN b -- 左关联费率表,保留所有全量组合,只匹配已存在的费率记录 LEFT JOIN c ON a.empId = c.empId AND b.prodId = c.prodId -- 可选加排序,让输出顺序和示例完全对齐 ORDER BY a.empId, b.prodId;
关键说明
- 这里用
CROSS JOIN而不是其他连接方式,就是为了拿到员工表每条记录和产品表每条记录的一一配对,哪怕后续往c表里插了部分费率,也不会丢失没有费率的组合。 - 用
COALESCE做空值兜底是因为它是SQL通用标准函数,主流数据库全支持,比数据库特有函数(比如MySQL的IFNULL、SQL Server的ISNULL)兼容性更好,换环境不用改代码。 - 不需要针对空c表做特殊兼容:哪怕c表一条记录都没有,左关联出来的c.rate全是NULL,会被自动转成0.00,输出结果和示例完全一致。
内容的提问来源于stack exchange,提问作者Kevin S
相关产品推荐
相关产品推荐

