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

SQL语法疑问:SELECT子查询使用MAX函数关联另一表字段的原理

关于SELECT子句中关联子查询的运行原理

先看你给出的SQL代码:

SELECT 
    Ord.SalesOrderID, Ord.OrderDate,
    (SELECT MAX(OrdDet.UnitPrice)        
     FROM Sales.SalesOrderDetail AS OrdDet         
     WHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice
FROM 
    Sales.SalesOrderHeader AS Ord;

这种写法里的子查询叫做相关子查询,它的核心逻辑是子查询会依赖外部查询的每一行数据来计算结果,具体运行步骤如下:

  • 第一步:外部查询先从Sales.SalesOrderHeader(别名Ord)里取出第一行数据,拿到这行的SalesOrderID值。
  • 第二步:执行SELECT子句里的子查询,把刚才拿到的Ord.SalesOrderID代入WHERE条件,在Sales.SalesOrderDetail(别名OrdDet)里找出所有和这个订单ID匹配的明细行,然后计算这些行里UnitPrice的最大值。
  • 第三步:把计算出的最大值作为MaxUnitPrice字段,和当前外部行的SalesOrderID、OrderDate拼成结果集里的一行。
  • 第四步:外部查询继续取下一行Sales.SalesOrderHeader的数据,重复上面的步骤2-3,直到外部表的所有行都处理完毕。

简单说,就是外部表每走一行,子查询就跟着“量身定制”计算一次对应的最大值,所以能实现给每个订单行匹配它自己的最高单价。

这种写法和用JOIN加GROUP BY的效果一致,但相关子查询的写法更直接,适合给每行单独添加一个聚合类的计算字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:10:30