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

SQL Server两表获取全ID组合(无匹配也返回)的优化方案咨询

优化方案

你现有的实现逻辑是正确的,但存在冗余开销,可以进一步简化,性能更好:

现有方案的冗余点

你在CTE中做的GROUP BY完全没有必要:Companies的CompanyId是主键、Motors的MotorId也是主键,两者交叉连接生成的(CompanyId, MotorId)组合天然唯一,额外的聚合操作只会增加不必要的性能损耗。同时多层关联也增加了执行计划的复杂度。

更优的实现代码

SELECT 
    c.CompanyId,
    m.MotorId,
    c.Tot1,
    c.Tot2,
    ms.TotSales1,
    ms.TotSales2
FROM Companies c
-- 生成所有Company和Motor的组合
CROSS JOIN Motors m
-- 左连接匹配对应公司+对应电机的销售数据
LEFT JOIN Motors ms 
    ON c.CompanyId = ms.CompanyId 
    AND m.MotorId = ms.MotorId
-- 如果需要固定排序可以保留,不需要可以删除
ORDER BY c.CompanyId, m.MotorId

方案优势

  1. 性能更高:去掉了冗余的CTE、GROUP BY操作,仅需要2次表关联,比原有方案少1次关联,数据量越大性能优势越明显
  2. 完全符合你的业务要求:字段顺序和你要求的完全一致,不需要调整即可直接和C#类做字段映射,没有匹配的销售数据自动返回NULL,和你给出的示例结果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:57:00