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

如何在不使用WHERE子句的情况下编写该T-SQL JOIN查询?

解决方案

要实现你需要的结果集且不使用WHERE子句,关键是把所有过滤逻辑整合到JOIN的ON条件中,同时选择合适的JOIN类型来避免多余的行。具体来说:

  • 使用INNER JOIN而非LEFT JOIN:因为你只需要关联存在对应实例(#TblA)的版本记录,LEFT JOIN会引入#TblB中无匹配实例的行(对应#TblA字段为NULL),这不是你想要的。
  • 在ON条件中同时指定两个核心规则:
    1. 关联相同SQLVersion的行(确保只比较同版本的构建号)
    2. 确保#TblB的ProductVersion高于#TblA的对应值

最终查询代码

SELECT 
    a.SQLInstance,
    a.SQLVersion,
    a.ProductVersion AS CurrentBuild,
    b.ProductVersion AS AvailableHigherBuild
FROM #tblA a
INNER JOIN #tblB b 
    ON a.SQLVersion = b.SQLVersion 
    AND b.ProductVersion > a.ProductVersion
ORDER BY 
    a.SQLVersion,
    a.SQLInstance,
    b.ProductVersion DESC

代码说明

  1. 字段别名:给a.ProductVersion和b.ProductVersion加上别名(CurrentBuild和AvailableHigherBuild),让结果集更清晰,符合报表需求。
  2. 排序:添加ORDER BY子句让结果按版本、实例、可用版本从高到低排序,方便分组报表展示。
  3. 无WHERE子句:所有过滤逻辑都在ON条件中完成,完全符合你的要求。

验证结果

比如对于MyServer1(SQL Server 2016,13.0.4001.0),结果会列出#TblB中所有13.0.4001.0以上的SQL Server 2016构建号,每一行重复显示MyServer1的信息,正好满足分组报表的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:30:57